2012-04-15 100 views
1

我有這個訂單 - 由問題我canot裂紋。我從我的桌面上選擇這樣的:mysql order-by original「where order」

SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3' 

這將返回我想要的模塊。但是這些模塊位於手術檯,說在這個順序:

  1. 單詞數
  2. 模塊1
  3. 模塊2

而且他們在這個順序返回給我。我怎樣才能讓他們按順序顯示在哪裏(1,2,3)?

非常感謝!

回答

2

我認爲你正在尋找FIELD

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module1', 'module2', 'name3') 

無論如何,如果名稱是按字母順序只需使用:

ORDER BY name 

還要注意的是使用IN運營商通常比快只是使用很多OR s。

+0

謝謝您的回答,這是最有用的! Codigniter實現如果任何人有興趣,可以在這裏找到:[鏈接](http://www.simonemms.com/2011/04/07/codeigniter-activerecord-order-by-field/) – 2012-04-16 09:33:19

0

我認爲你在你的問題中有一個錯字。你的最後一個條件應該是name = 'module3',而不是僅僅name3

請嘗試以下方法:

SELECT * 
FROM 'sidemodules' 
WHERE name = 'module1' OR name = 'module2' OR name = 'module3' 
ORDER BY name; 
+0

不,代碼是罰款,我的帖子馬虎:S;) – 2012-04-16 09:34:26

0

如果你有一個固定的順序,你可以用一個CASE語句中的順序:

SELECT * FROM 'sidemodules' 
WHERE name = 'module1' 
    OR name = 'module2' 
    OR name = 'module3' 
ORDER BY CASE 
    WHEN name = 'module1' THEN 1 
    WHEN name = 'module3' THEN 2 
    WHEN name = 'module2' THEN 3 
ELSE '0' 
END 
1

你需要按子句順序使用FIELD。 returnset將與您編寫的訂單相同。

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module1', 'module2', 'name3') 

結果: 模塊1,模塊2,NAME3

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module2', 'module1', 'name3') 

結果: 模塊2,模塊1,NAME3

+0

謝謝你的回答。 – 2012-04-16 09:33:36