我有以下字段的遊戲表: user_id, level, clear_time
排名 - 選擇相應列的值到MAX(列)值
有水平的一些N個和表跟蹤時用戶跨越一定的水平。現在,我需要根據兩個約束對用戶進行排名:level
和clear_time
。顯而易見,更高級別的用戶站在前面,但是當多個用戶處於同一級別時,clear_time
就是決定誰在前方,即先清除該級別的人。以下是我嘗試過的方式,並不是我想要的方式。級別排序工作正常,但clear_time
搞砸了。
SELECT
u.*,
@rank := @rank + 1 rank
FROM
(SELECT
t1.user_id user_id,
MAX(t1.level) level,
t1.clear_time clear_time,
t2.username username
FROM
gameplay t1
INNER JOIN
users t2
ON
(t1.user_id = t2.id)
GROUP BY
user_id
ORDER BY
level DESC,
clear_time ASC
) u
JOIN
(SELECT @rank := 0) r
我看到問題是MAX(級別)沒有得到其相應的clear_time。我無法完成。 分析結果,我看到相應的字段爲MAX(t1.level)
值沒有被選中。我該如何做到這一點?
工作。謝謝。 :) – 2014-11-08 19:18:37
但等待,@GregBoswer,這是導致一些user_id的重複。 – 2014-11-08 20:40:38
重複項是什麼樣的?相同的'level'和'user_id',但不同的'clear_time'(給定'user_id'和'level'的'gameplay'中的多個條目)? – 2014-11-08 20:51:51