MySQL - Select dificil mysql

 
Vista:
sin imagen de perfil

Select dificil mysql

Publicado por Daniel (5 intervenciones) el 22/04/2018 01:56:37
Hola

Resumido tengo 2 tablas mysql así:

Torneos
Id - Nombre

Jugadores_torneos
Jugador - Id_torneo - Pareja

la tabla torneos contiene distintos nombres de torneos con su id,
la tabla Jugadores_torneos tiene nombre de jugador, id_torneo en el que participo y nro de Pareja,
(son siempre 2 jugadores que jugaron juntos y tienen el mismo nro en el campo Pareja)
(este nro de pareja se repite para distintos Id_torneo, osea en cada torneo el nro de pareja empieza de 1, hay dos jugadores con el 1, dos con el 2 y así sucesivamente)

Lo que quiero hacer es un select para ver si una determinada pareja ya jugó junto en un torneo anterior.
osea tomar 2 jugadores y que el select devuelva una lista de los torneos donde estos dos tienen el mismo nro de Pareja.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 23
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Select dificil mysql

Publicado por Juan (25 intervenciones) el 23/04/2018 18:42:12
Buenas Daniel

Si sabes de antemano los dos jugadores y su numero de pareja, podría ser algo así:

SELECT Id_torneo FROM JUGADORES_TORNEOS WHERE (Jugador = "jugador1" OR Jugador "jugador2") AND Pareja = "numeroPareja"

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Select dificil mysql

Publicado por Daniel (5 intervenciones) el 23/04/2018 19:58:25
Gracias por responder.
No se el nro de pareja, ademas en cada torneos son distintos los nros, no es un select tan simple como eso.
Son un grupo de 30 o 40 personas que participan en torneos, en parejas de a 2, la idea es ver si una determinada pareja en torneos anteriores
tambien fueron pareja, osea jugaron juntos.

Tabla Torneos
Id Nombre
1 - Santa Fe
2 - Carcaraña
3 - Carlos Paz

Tabla Jugadores_torneos
Id_Torneo Nombre_jugador Pareja
1 AA 1
1 BB 2
1 XX 2
1 ZZ 1
1 OO 3
1 RR 3
2 AA 2
2 BB 2
2 XX 1
2 ZZ 1
2 OO 3
2 RR 3

y así hay muchos id de torneos, con la misma gente que jugaron en parejas mezclados entre ellos

quiero tomar por ejemplo la pareja OO RR del tordeo id 2 (que fueron pareja en ese torneo) y ver en que otros torneos tambien fueron pareja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

pregunta

Publicado por Daniel (5 intervenciones) el 23/04/2018 20:17:19
en realidad seria facil si puediera hacer este select:

select equal id_torneo, pareja where id_jugador = 1 or id_jugador = 2

osea si hubiera algo que haga lo contrario que hace DISTINCT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

pregunta

Publicado por leonardo_josue (414 intervenciones) el 23/04/2018 20:55:48
Hola Daniel:

A ver, tengo todavía algunas dudas con la información que pones de ejemplo. Tomando a la pareja formada por OO y RR, en tus datos de ejemplo tienen asignada el número de pareja 3, tanto para el torneo 1 como para el torneo 2, hasta aquí todo va bien. la pregunta sería si esta pareja SIEMPRE TENDRÁ EL NUMERO 3 PARA CUALQUIER TORNEO EN EL QUE PARTICIPE, o si esta misma pareja compuesta por OO y RR puede tener otro número de pareja, es decir, tendrías dos opciones una con tu tabla así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT *
    -> FROM jugadores_torneos
    -> WHERE nombre_jugador IN ('OO', 'RR');
+-----------+----------------+--------+
| id_torneo | nombre_jugador | pareja |
+-----------+----------------+--------+
|         1 | OO             |      3 |
|         1 | RR             |      3 |
|         2 | OO             |      3 |
|         2 | RR             |      3 |
|         3 | OO             |      3 |
|         3 | RR             |      3 |
+-----------+----------------+--------+
6 rows in set (0.00 sec)

es decir, el número de la pareja SIEMPRE ES EL MISMO, sólo cambia el torneo.

O puedes tener algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT *
    -> FROM jugadores_torneos
    -> WHERE nombre_jugador IN ('OO', 'RR');
+-----------+----------------+--------+
| id_torneo | nombre_jugador | pareja |
+-----------+----------------+--------+
|         1 | OO             |      3 |
|         1 | RR             |      3 |
|         2 | OO             |      6 |
|         2 | RR             |      6 |
|         3 | OO             |      8 |
|         3 | RR             |      8 |
+-----------+----------------+--------+
6 rows in set (0.00 sec)

es decir, aquí el número de pareja CAMBIA PARA CADA TORNEO. Acláranos este punto para tratar de ayudarte con la consulta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

pregunta

Publicado por Daniel (5 intervenciones) el 23/04/2018 23:57:38
Te agradezco mucho tu ayuda,

ya Lo hice en 2 consultas para terminarlo porque en una me resulto imposible, pero si querés pensarlo te detallo un poco más,
a mi me supero jaa.

El nro de pareja no es el mismo y los integrantes de cada pareja tampoco

Son torneos de pelota a paleta que se realizan en distintas localidades y mas o menos participan los mismos jugadores, cada uno se anota individualmente y luego arman las parejas fixtures etc en la web

Las parejas se arman poniendo el mismo nro de pareja a los 2 que jueguen juntos comenzando desde el 1, entonces las 2 personas que vayan a jugar juntos van a tener el mismo nro de pareja.

La consulta que quería hacer es para evitar repetir las parejas que ya jugaron juntos en torneos anteriores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

pregunta

Publicado por leonardo_josue (414 intervenciones) el 24/04/2018 16:39:50
Hola de nuevo Daniel:

Me da gusto que hayas resuelto la consulta, aunque sea en dos pasos, pero veamos si esto te sirve más o menos para lo que quieres hacer... supongamos que tenemos la siguiente información:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM jugadores_torneos;
+-----------+----------------+--------+
| id_torneo | nombre_jugador | pareja |
+-----------+----------------+--------+
|         1 | OO             |      3 |
|         1 | RR             |      3 |
|         1 | AA             |      2 |
|         1 | BB             |      2 |
|         2 | OO             |      3 |
|         2 | RR             |      3 |
|         2 | PP             |      1 |
|         2 | QQ             |      1 |
|         3 | OO             |      6 |
|         3 | RR             |      6 |
|         3 | RR             |      4 |
|         3 | QQ             |      4 |
|         4 | OO             |      7 |
|         4 | PP             |      7 |
|         4 | RR             |      8 |
|         4 | QQ             |      8 |
+-----------+----------------+--------+
16 rows in set (0.00 sec)

Ahora, si filtramos sólo la información de los jugadores OO y RR tenemos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT * FROM jugadores_torneos WHERE nombre_jugador IN ('OO', 'RR');
+-----------+----------------+--------+
| id_torneo | nombre_jugador | pareja |
+-----------+----------------+--------+
|         1 | OO             |      3 |
|         1 | RR             |      3 |
|         2 | OO             |      3 |
|         2 | RR             |      3 |
|         3 | OO             |      6 |
|         3 | RR             |      6 |
|         3 | RR             |      4 |
|         4 | OO             |      7 |
|         4 | RR             |      8 |
+-----------+----------------+--------+
9 rows in set (0.00 sec)

Observa, para los torneos 1 y 2, ambos jugadores aparecen con el mismo numero de pareja, por lo tanto hay (lo que quiere decir que fueron pareja). para el caso del torneo 3, el jugador RR aparece con 2 numeros de parejas (6 y 4) pero también el jugador OO tiene el número de pareja 6, por lo tanto RR y OO fueron pareja, pero adicionalmente RR también jugo con otra pareja (simplemente estoy suponiendo que se puede dar este caso, puede que en la realidad no suceda así. Ahora observa, para el torneo 4 RR y OO no tienen el mismo número de pareja, por lo tanto NO SE DEBE CONTABILIZAR... entonces, lo que puedes hacer sería primero AGRUPAR POR TORNEO y PAREJA ESTOS REGISTROS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT id_torneo, pareja, COUNT(1)
    -> FROM jugadores_torneos T2
    -> WHERE
    -> T2.nombre_jugador IN ('OO', 'RR')
    -> GROUP BY id_torneo, pareja;
+-----------+--------+----------+
| id_torneo | pareja | COUNT(1) |
+-----------+--------+----------+
|         1 |      3 |        2 |
|         2 |      3 |        2 |
|         3 |      4 |        1 |
|         3 |      6 |        2 |
|         4 |      7 |        1 |
|         4 |      8 |        1 |
+-----------+--------+----------+
6 rows in set (0.00 sec)

Observa entonces que aquello torneos que tienen un count = 2 COINCIDEN CON LOS TORNEOS EN LOS QUE LOS JUGADORES FUERON PAREJA, entonces simplemente tienes que filtrar con HAVING y contar el número de registros que tiene la consulta para obtener el número de torneos en los que ambos jugadores han participado como pareja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT COUNT(1) total_torneos_como_pareja
    -> FROM
    ->  ( SELECT id_torneo, pareja, COUNT(1)
    ->    FROM jugadores_torneos T2
    ->    WHERE
    ->      T2.nombre_jugador IN ('OO', 'RR')
    ->    GROUP BY id_torneo, pareja
    ->    HAVING COUNT(1) = 2) T;
+---------------------------+
| total_torneos_como_pareja |
+---------------------------+
|                         3 |
+---------------------------+
1 row in set (0.00 sec)

Si quieres obtener los datos de otra pareja (por ejemplo RR y QQ) simplemente cambias la condición del IN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT COUNT(1) total_torneos_como_pareja
    -> FROM
    ->  ( SELECT id_torneo, pareja, COUNT(1)
    ->    FROM jugadores_torneos T2
    ->    WHERE
    ->      T2.nombre_jugador IN ('QQ', 'RR')
    ->    GROUP BY id_torneo, pareja
    ->    HAVING COUNT(1) = 2) T;
+---------------------------+
| total_torneos_como_pareja |
+---------------------------+
|                         2 |
+---------------------------+
1 row in set (0.00 sec)

ya que estos jugadores fueron pareja en los torneos 3 y 4. Y si pones por ejemplo la pareja AA y RR:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT COUNT(1) total_torneos_como_pareja
    -> FROM
    ->  ( SELECT id_torneo, pareja, COUNT(1)
    ->    FROM jugadores_torneos T2
    ->    WHERE
    ->      T2.nombre_jugador IN ('AA', 'RR')
    ->    GROUP BY id_torneo, pareja
    ->    HAVING COUNT(1) = 2) T;
+---------------------------+
| total_torneos_como_pareja |
+---------------------------+
|                         0 |
+---------------------------+
1 row in set (0.00 sec)

El resultado es 0 porque nunca han sido pareja. Creo que no es tan complicada la consulta, pero revísala y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

pregunta

Publicado por Daniel (5 intervenciones) el 24/04/2018 19:23:52
Funciona perfecto y además está muy bien explicado, excelente !

Me sirvió para aprender un poco más.

Te agradezco mucho tu tiempo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar