我有这个订单 - 由问题我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