Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/04/2013, 14:02
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Optimizar busqueda

Hola de nuevo:

En mi post te pedía que si esto no es lo que esperabas como salida nos dijeras a partir de algunos datos de ejemplo qué es lo que esperabas como salida, ojo con eso. En ocasiones resulta más fácil entender lo que se quiere obtener con un ejemplo visual más que con una larga explicación.

Veamos si entendí correctamente. Más que los puntos lo que te interesa saber entonces es la posición en que te encuentras para cada juego correcto??? es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, nombre,
  2.     -> pjuego1,
  3.     -> ( SELECT COUNT(id) FROM tabla T2
  4.     ->   WHERE T2.pjuego1 >= T1.pjuego1) rank1
  5.     -> FROM tabla T1;
  6. +------+--------+---------+-------+
  7. | id   | nombre | pjuego1 | rank1 |
  8. +------+--------+---------+-------+
  9. |    1 | uno    |       1 |     5 |
  10. |    2 | dos    |       2 |     4 |
  11. |    3 | tres   |       3 |     3 |
  12. |    4 | cuatro |       4 |     2 |
  13. |    5 | cinco  |       5 |     1 |
  14. +------+--------+---------+-------+
  15. 5 rows in set (0.00 sec)

Es decir, por un lado presento los puntos que obtuve por cada juego y con una subconsulta obtengo cuántos jugadores existen con más puntos que yo, eso me da la posición.

Sin embargo, esta consulta puede tener problemas dependiendo de cómo tienes organizada tu información, observa lo que pasa con los datos que pongo para el juego 3:

Código MySQL:
Ver original
  1. mysql> SELECT id, nombre,
  2.     -> pjuego3,
  3.     -> ( SELECT COUNT(id) FROM tabla T2
  4.     ->   WHERE T2.pjuego3 >= T1.pjuego3) rank3
  5.     -> FROM tabla T1;
  6. +------+--------+---------+-------+
  7. | id   | nombre | pjuego3 | rank3 |
  8. +------+--------+---------+-------+
  9. |    1 | uno    |       1 |     4 |
  10. |    2 | dos    |       0 |     5 |
  11. |    3 | tres   |       1 |     4 |
  12. |    4 | cuatro |       2 |     1 |
  13. |    5 | cinco  |       1 |     4 |
  14. +------+--------+---------+-------+
  15. 5 rows in set (0.00 sec)

Observa que aquí estoy asignando puntos iguales para más de un jugador, esto se ve reflejado en el ranking, estrictamente hablando es correcto que el jugador 4 aparezca en primer lugar, pero los jugadores con 1 punto deberían aparecer en segundo, no en 4 como aparece... como te repito no sé como tienes almacenada tu información ni cómo haces la asignación de puntos. Si tienes algo parecido a lo que te pongo tendrías que hacer una consulta distinta, aunque no sería nada sencilla... si es así creo que hacerlo mediante programación sería más sencillo que obtener una consulta.

Saludos
Leo.