2010-05-08 129 views

回答

6

我認爲最簡單的方法是做這樣的:

SELECT * FROM `mytable` ORDER BY FIND_IN_SET(id, '2,3,1') 
+0

這正是我正在尋找的。謝謝! – 2010-05-09 20:21:46

+0

+1,非常優雅! – Heinzi 2010-05-10 15:10:39

1

您可以添加與值的虛擬列將

MOD(ID, 3) 

,並通過其訂購您的查詢上升。例如:

SELECT somecolumn, MOD(ID, 3) AS ordered_id FROM my_table ORDER BY ordered_id 
+0

這絕對有效,但它不應該如果表中有3個以上的ID,這個查詢必須手動更改(這不是最大的交易,但我的純粹主義者正在努力,哈!)。 – ABach 2010-05-08 18:37:41

+0

嗯......爲什麼這個工作? 2/3/1 MOD 3導致2/0/1。你不需要使用MOD(ID + 1,3)嗎? – Heinzi 2010-05-08 18:40:48

+0

它可能工作,但這是一個非常糟糕的解決方案,因爲完整表的MOD()必須在從中選擇一些行之前進行計算。 – Sebastian 2015-01-19 09:07:15

0

未經測試:

SELECT ..., IF(ID=2, 1, IF(ID=3, 2, 3)) AS orderByValue 
    FROM ... 
ORDER BY orderByValue 

它使用IF function轉換ID值:

ID  orderByValue 
    2  1 
    3  2 
else  3