我有一個簡單的表稱爲數據如下用戶:MYSQL排序和使用某行限制,選擇一個和下一個行
id | hops
1 | 3
2 | 1
3 | 5
4 | 2
5 | 4
6 | 5
我想選擇任何給定的ID的跳數,我根據從最高到最低排序的跳數指定並選擇下一個和先前的ID。
解釋得我用下面的查詢:
SELECT * FROM test WHERE id = 1
OR (id > 1 AND hops >= (SELECT hops FROM test WHERE id= 1))
OR (id < 1 AND hops <= (SELECT hops FROM test WHERE id= 1))
LIMIT 3
所以在上面的查詢我試圖讓id=1
,一張ID具有相同或更高的跳數,和以前的ID相同或跳數較少。
這是結果我得到:
id | hops
1 | 3
3 | 5
5 | 4
正如你可以看到它選擇的ID = 1級兩個較高的IDS,雖然我只想要一個更高的ID和一個低ID。所以,在這種情況下,結果應該是這樣的,而不是:
id | hops
1 | 3
3 | 5
由於沒有低於1的ID,所以沒有降低到符合標準且只選擇1高ID。錯誤的結果是因爲使用了LIMIT 3,但我無法爲每個條件使用LIMIT。所以不知道如何解決這個問題。
還有一個問題,會使用子查詢 "SELECT hops FROM test WHERE id= 1"
減慢服務器大規模?我聽說使用子查詢並不可取,但除了使用單獨的查詢外沒有其他方法可以獲取此數字。
感謝
對於寫得好的問題+1。 – Kermit