2010-08-03 173 views
1

假設我有一個查詢「select * from where where id in(0,2,5,1,3)」,我實際上希望以相同的順序返回行被指定爲where子句。這些ID的順序將從查詢變爲查詢,並且訂單沒有任何模式。我知道可以改變data model, create temp tables, etc。但請相信我,這些類型的解決方案不適用於我的情況。我也無法改變我的應用程序代碼中結果對象的順序。按排序查詢指定的SQL排序順序

我也知道,不同的數據庫引擎有不同的排序方式,有些情況下沒有保證等等等等等等。我只是想不,這可能嗎?

我將使用MySQL的或SQL Server是否有幫助:)

+0

,這都在查詢中完成,或可無論是調用查詢做到這一點? – AllenG 2010-08-03 18:34:54

回答

6

在MySQL中,你可以使用FIND_IN_SET

ORDER BY FIND_IN_SET(id, '0,2,5,1,3') 

最有序的便攜式手段是,使用CASE表達式:

ORDER BY CASE id 
      WHEN 0 THEN 1 
      WHEN 2 THEN 2 
      WHEN 5 THEN 3 
      WHEN 1 THEN 4 
      WHEN 3 THEN 5 
     END 
+0

是的,建設這種情況下的說法會很棘手,但我沒有看到它的出路:( – oreoshake 2010-08-03 22:13:33

5
Select .. 
From Clauses 
Where Id In(0,2,5,1,3) 
Order By Case Id 
       When 0 Then 1 
       When 2 Then 2 
       When 5 Then 3 
       When 1 Then 4 
       When 3 Then 5 
       ... 
       End