Lo hace por que primero hace el join y despues el SUM group by
Es decir si tenemos
Puntage usuario:::puntos ....
1::::::::::::::1
1::::::::::::::2
2::::::::::::::5
Usuarios id:::::Nombre...
1::::::Pepito
2::::::Pepita
Fotos idfoto:::::usuarioId....
1::::::::::::::1
2::::::::::::::1
3::::::::::::::1
4::::::::::::::2
Puntage INNER JOIN Usuarios usuario:::puntos:::id:::::Nombre...
1::::::::::::::1::::::::::1::::::Pepito
1::::::::::::::2::::::::::1::::::Pepito
2::::::::::::::5::::::::::2::::::Pepita
(Lo anterior)INNER JOIN Fotos usuario:::puntos:::id:::::Nombre:::::idfoto:::::us uarioId....
1::::::::::::::1::::::::::1::::::Pepito::::::::1:: :::::::::1
1::::::::::::::1::::::::::1::::::Pepito::::::::2:: :::::::::1
1::::::::::::::1::::::::::1::::::Pepito::::::::3:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::1:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::2:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::3:: :::::::::1
2::::::::::::::5::::::::::2::::::Pepita::::::::4:: :::::::::2
si sumas por usuarios tendrás
id:::::Nombre:::Sum(Puntos)
1::::::Pepito:::::::::::::9
2::::::Pepita:::::::::::::5
Mira si esto te funciona, y analiza que hace....
Código sql:
Ver originalSELECT
puntaje.usuario,
SUM(puntaje.puntos) AS totalPuntos,
usuarios.id AS usuarioId
FROM
puntaje
INNER JOIN usuarios ON puntaje.usuario=usuarios.usuario
WHERE
usuarios.activo=1 AND
puntaje.fecha >= DATE_SUB(curdate(), INTERVAL 1 MONTH)
HAVING
usuarios.id IN (SELECT DISTINCT usuarioId FROM fotos)
/*porque debe tener al menos una foto*/
GROUP BY puntaje.usuario
ORDER BY totalPuntos DESC
LIMIT 10
Pregunta Si alguien
NO tiene fotos puede tener puntos?....
Si fuera que
NO luego cambiando de INNER JOIN a LEFT JOIN entre puntaje y usuarios no tendrias que complicarte la vida con la tabla Fotos... puesto que solo saldran los que esten en puntage, es decir los que tienen puntos, es decir los que tienen alguna foto.... ya que
si no tienen fotos
no tienen puntos....????!!!
Quim