Ich versuche, die Gesamtanzahl der Punkte, die ein Benutzer hat, sowie die aktuellen Monatspunkte zu erhalten. Wenn ein Benutzer einen Punkt erhält, wird er mit einem Zeitstempel in die Punktentabelle eingeloggt. Die Summen ignorieren den Zeitstempel, während die Punkte des aktuellen Monats nach den Punkten mit dem korrekten Zeitstempel (vom ersten Tag des Monats) suchen.Warum gibt diese mysql-Abfrage Müll Ergebnisse?
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
Punkte Tabellenstruktur
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;
Dies in einer sehr großen Zahl ergibt, das ist die Summe aller Punkte gleich, durch die Anzahl der Zeilen multipliziert, die der Abfrage entsprechen.
Ich muss dies ohne die Verwendung von Unterabfragen oder mehrere Abfragen erreichen.
können Sie die Tabellenstruktur hinterlassen? – sfossen
natürlich, du machst doppelt beitreten, also ist es eine kartesische Multiplikation – vartec
Ich glaube nicht, dass Sie überhaupt beitreten müssen, versuchen Sie die Antwort, die ich gepostet habe. – sfossen