En essayant d'obtenir le nombre total de points qu'un utilisateur a, ainsi que les points du mois en cours. Lorsqu'un utilisateur obtient un point, il est connecté à la table de points avec un horodatage. Les totaux ignorent l'horodatage, tandis que les points du mois en cours recherchent les points ayant l'horodatage correct (à partir du premier jour du mois).Pourquoi cette requête mysql me donne-t-elle des résultats erronés?
SELECT user_id, user_name, sum(tpoints.point_points) as total_points, sum(mpoints.point_points) as month_points
FROM users
LEFT JOIN points tpoints
ON users.user_id = tpoints.point_userid
LEFT JOIN points mpoints
ON (users.user_id = mpoints.point_userid AND mpoints.point_date > '$this_month')
WHERE user_id = 1
GROUP BY user_id
la structure de table de points
CREATE TABLE IF NOT EXISTS `points` (
`point_userid` int(11) NOT NULL,
`point_points` int(11) NOT NULL,
`point_date` int(11) NOT NULL,
KEY `point_userid` (`point_userid`),
KEY `point_date` (`point_date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Il en résulte un très grand nombre, thats égal à la somme de tous les points, multiplié par le nombre de lignes correspondant à la requête.
Je dois y parvenir sans l'utilisation de sous-requêtes ou de requêtes multiples.
peut vous envoyer la structure de la table? – sfossen
bien sûr, vous faites deux fois, donc c'est une multiplication cartésienne – vartec
Je ne pense pas que vous ayez besoin de vous joindre du tout, essayez la réponse que j'ai posté. – sfossen