हालांकि मुझे यकीन नहीं है कि इस संदर्भ में "समस्याग्रस्त" का क्या अर्थ है, यहां एक सादे LEFT JOIN
के रूप में फिर से लिखी गई क्वेरी है अंत में रैंकिंग प्राप्त करने के लिए एक सबक्वायरी के साथ (ORDER BY
रैंकिंग से पहले किए जाने की जरूरत है);
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;
संपादित करें:group_id को ध्यान में रखने के लिए, आपको क्वेरी को कुछ हद तक विस्तारित करना होगा;
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;