2011-08-22 33 views
1

我使用這個查詢:的MySQL凡結果是無序

SELECT * FROM `challenges` WHERE id IN (#, #, #, #) 

凡#的可用單排4關聯的ID號。這很有效,因爲它允許我在一個查詢中從表中抽出4行,但是有一個奇怪的問題。我不知道爲什麼它會這樣做,但結果中行的順序與查詢中的順序不同。例如:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) 

我希望他們能夠按照這個順序出來,但他們反而出來是這樣的:

108,134,142,208

我發現的唯一的事情是, challenge表中的每一行都有一個名爲「first_recorded」的字段,並且該查詢出來的行的順序按該字段排序,按升序排列。有沒有辦法強制查詢以與訂購ID相同的順序排列結果?

+1

http://stackoverflow.com/questions/4858828/sql-where-in-sort-by-order我認爲這是一個類似於你的問題。 – prakashkut

+0

哎呀,對不起。我搜索了大約10分鐘,但找不到任何東西(誠然,我的谷歌搜索技能並不是那麼好)。當我輸入問題標題時,我甚至沒有想到。 – HaLo2FrEeEk

回答

5

你需要按field

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY FIELD(id, 108,208,134,142) 
+0

這比我使用的解決方案更優雅,它基本上說'ORDER BY id = 108,id = 208,id = 134,id = 142'。謝謝! – HaLo2FrEeEk

3

可以通過現場使用mysql命令:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY FIELD(id, 108, 208, 134, 142); 
1

你要查詢改變了這一點。

SELECT * FROM `challenges` 
WHERE id IN (108, 208, 134, 142) 
ORDER BY ID 

如果你希望他們以同樣的方式排列如在聲明中,無論數字排序的,你可以使用下面的。

SELECT * FROM `challenges` 
WHERE id IN (108, 208, 134, 142) 
ORDER BY FIELD(id,108,208,134,142) 
1

無法保證結果是按順序排列的,您應該明確指定ORDER BY子句。如果你想通過值id排序:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY id 

的任意順序:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) 
    ORDER BY FIELD(id, 108, 208, 134, 142)