Ver Mensaje Individual
  #6 (permalink)  
Antiguo 19/09/2013, 06:14
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de lista de usuarios

Cita:
El tema que no se si mencione, es que la tabla historypoints mantiene una historia de puntos, por lo que cada usuario tiene varios registros en esta tabla y el ultimo registro de cada usuario es el que corresponde como puntos actuales.
Bueno, eso es crítico y debí haberlo supuesto, a causa del nombre de la tabla.
De todos modos la cosa se vuelve simple, pero ahora deberás definir cuál es el valor que deseas obtener: el máximo puntaje, el mínimo, o la media. Porque incluso si restringes la búsqueda a un período, deberás asegurarte que en ese periodo hay aun único registro por cada user, o bien aplicar las funciones que corresponda.
Supongamos buscar el máximo puntaje:

Código MySQL:
Ver original
  1.       (SELECT U.userId, U.nicename, MAX(H.points) points
  2.       FROM bp_users u INNER JOIN bp_historypoints h ON U.userId = H.userId
  3.       WHERE H.points > (SELECT points FROM bp_historypoints WHERE userId = 21)
  4.       GROUP BY U.userId
  5.       ORDER BY H.points DESC
  6.       LIMIT 3) T1
  7.       (SELECT U.userId, U.nicename , MAX(H.points) points
  8.       FROM bp_users u INNER JOIN bp_historypoints h ON U.userId = H.userId
  9.       WHERE H.userId = 21
  10.       GROUP BY U.userId
  11.       LIMIT 1) T2
  12.       (SELECT U.userId, U.nicename, MAX(H.points) points
  13.       FROM bp_users u INNER JOIN bp_historypoints h ON U.userId = H.userId
  14.       WHERE H.points < (SELECT points FROM bp_historypoints WHERE userId = 21)
  15.       GROUP BY U.userId
  16.       ORDER BY H.userId
  17.       LIMIT 2) T3;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)