Obwohl ich mir nicht sicher bin, was "problematisch" in diesem Zusammenhang bedeutet, ist hier die Abfrage als einfacher LEFT JOIN
umgeschrieben mit einer Unterabfrage, nur um das Ranking am Ende richtig zu bekommen (die ORDER BY
muss vor dem Ranking erfolgen);
SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
SELECT u.user_id, u.score
FROM user_score u
LEFT JOIN user_score u2
ON u.user_id=u2.user_id
AND u.`timestamp` < u2.`timestamp`
WHERE u2.`timestamp` IS NULL
ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;
BEARBEITEN:Um group_id zu berücksichtigen, müssen Sie die Abfrage etwas erweitern;
SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
SELECT u.user_id, u.score
FROM user_score u
LEFT JOIN user_score u2
ON u.user_id=u2.user_id
AND u.group_id = u2.group_id -- u and u2 have the same group
AND u.`timestamp` < u2.`timestamp`
WHERE u2.`timestamp` IS NULL
AND u.group_id = 1 -- ...and that group is group 1
ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;