Re: ORDER BY nach Punkten....
Hallo Christian,
zu SQL Problemen bitte immer die CREATE TABLE aller beteiligten Tabellen und die passenden INSERT Testdaten mitliefern.
Denke ich mir also mal folgendes...
CREATE TABLE users (
user_id INT NOT NULL,
username VARCHAR(30) NOT NULL,
PRIMARY KEY (user_id)
);
CREATE TABLE tipps (
tipp_id INT NOT NULL,
user_id INT NOT NULL,
points INT NOT NULL,
gameid INT NOT NULL,
PRIMARY KEY (tipp_id)
);
INSERT INTO users VALUES
( 1, 'User-1'),
( 2, 'User-2');
INSERT INTO tipps VALUES
( 1, 1 , 2 , 1 ),
( 2, 1 , 3 , 2 ),
( 3, 1 , 0 , 3 ),
( 4, 2 , 2 , 1 ),
( 5, 2 , 2 , 2 ),
( 6, 2 , 1 , 3 );
/* Sortieren nach zwei Summen Kriterien und nach Name */
SELECT u.user_id,
MAX(u.username) AS username,
SUM( CASE
WHEN t.points = 3 THEN 1
ELSE 0
END
) AS sum_dreier,
SUM(t.points) AS sum_points
FROM users u
JOIN tipps t
ON t.user_id = u.user_id
GROUP BY u.user_id
ORDER BY sum_dreier DESC , sum_points DESC, u.username;
+---------+----------+------------+------------+
| user_id | username | sum_dreier | sum_points |
+---------+----------+------------+------------+
| 1 | User-1 | 1 | 5 |
| 2 | User-2 | 0 | 5 |
+---------+----------+------------+------------+
2 rows in set (0.00 sec)
mysql>
In der SELECT Liste habe ich jetzt zwei Rechenfelder: SUM_DREIER für die Anzahl der Dreier und SUM_POINTS für die Summe der Punkte allgemein. Der MAX(u.username) ist auch korrekt für den GROUP BY. Ohne MAX() müßte es eigentlich einen SQL-Fehler geben, nur dass MySQL dies nicht anmeckert (siehe SERVER_MODE ONLY_FULL_GROUP_BY).
Die ORDER BY Klausel besteht jetzt aus drei Spalten. Das Hauptsortkriterium ist SUM_DREIER, dann SUM_POINT und nun der USERNAME.
Grüße
Thomas