我有users
表:MySQL--加入用戶最新級別,沒有任何級別?
id | name
1 | Mike
我有rights
表,這給我的用戶的一些權利,如:
id | user | elevation | starts | ends
1 1 2 1382950736 1383555536
這裏,我已經升高麥克比2平,在開始1382950736結束於1383555536.在此時間範圍內,用戶是級別2.在其他時間,用戶是級別1.
我有一個查詢來查明用戶的級別:
SELECT IF(`z`.`elevation` IS NULL, 1, `z`.`elevation`) as `elevation`, `users`.`id`
FROM `users`
LEFT JOIN (
SELECT `user`, `elevation`
FROM `rights`
WHERE (`starts` <= $time) AND (`ends` > $time)
GROUP BY `user`
) as `z` ON `z`.`user` = `users`.`id`
這是偉大的,完美的作品。但是,對於某個用戶的海拔高度重疊的情況,我有一個問題。
例如:讓我們來想一個簡單的例子,現在是10。
我們創建該條目:
id | user | elevation | starts | ends
1 1 2 1 15
2 1 3 5 20
在這種情況下,這兩個項目符合(`starts` <= $time) AND (`ends` > $time)
狀態(當前時間爲10)。我的SELECT查詢在這些情況下的作用是爲我的用戶返回級別2,但他的最新條目是級別3。
如何修復我的查詢以返回最新級別,而不是任何級別,以防更多級別重疊?
只要是明確的,是'latest'equal到最高'starts'或最高的'id' – Strawberry
@Strawberry:''latest''等於最高的''starts''小於當前時間。 –
SELECT x。* FROM my_table JOIN(SELECT user,MAX(starts)max_starts FROM my_table GROUP BY user)y ON y.user = x.user AND y.max_starts = x.starts; – Strawberry