我有這個訂單 - 由問題我canot裂紋。我從我的桌面上選擇這樣的:mysql order-by original「where order」
SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'
這將返回我想要的模塊。但是這些模塊位於手術檯,說在這個順序:
- 單詞數
- 模塊1
- 模塊2
而且他們在這個順序返回給我。我怎樣才能讓他們按順序顯示在哪裏(1,2,3)?
非常感謝!
我有這個訂單 - 由問題我canot裂紋。我從我的桌面上選擇這樣的:mysql order-by original「where order」
SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'
這將返回我想要的模塊。但是這些模塊位於手術檯,說在這個順序:
而且他們在這個順序返回給我。我怎樣才能讓他們按順序顯示在哪裏(1,2,3)?
非常感謝!
我認爲你正在尋找FIELD
:
SELECT * FROM sidemodules
WHERE name IN ('module1', 'module2', 'name3')
ORDER BY FIELD(name, 'module1', 'module2', 'name3')
無論如何,如果名稱是按字母順序只需使用:
ORDER BY name
還要注意的是使用IN
運營商通常比快只是使用很多OR
s。
我認爲你在你的問題中有一個錯字。你的最後一個條件應該是name = 'module3'
,而不是僅僅name3
請嘗試以下方法:
SELECT *
FROM 'sidemodules'
WHERE name = 'module1' OR name = 'module2' OR name = 'module3'
ORDER BY name;
不,代碼是罰款,我的帖子馬虎:S;) – 2012-04-16 09:34:26
如果你有一個固定的順序,你可以用一個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
你需要按子句順序使用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
謝謝你的回答。 – 2012-04-16 09:33:36
謝謝您的回答,這是最有用的! Codigniter實現如果任何人有興趣,可以在這裏找到:[鏈接](http://www.simonemms.com/2011/04/07/codeigniter-activerecord-order-by-field/) – 2012-04-16 09:33:19