Mặc dù tôi không chắc "có vấn đề" nghĩa là gì trong ngữ cảnh này, nhưng đây là truy vấn được viết lại dưới dạng LEFT JOIN
đơn giản với một truy vấn con chỉ để có được thứ hạng ngay ở cuối (ORDER BY
cần phải được thực hiện trước khi xếp hạng);
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;
CHỈNH SỬA:Để tính đến group_id, bạn sẽ cần mở rộng truy vấn một chút;
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;