MySQL订单 - 原始“在哪里订购”

时间:2012-04-15 17:03:20

标签: php mysql sql-order-by

我有这个订单问题,我可以破解。我从我的桌子中选择如下:

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

它返回了我想要的模块。但是模块就在这个表中,按顺序说:

  1. 单词数
  2. 模块1
  3. 单词数
  4. 他们按此顺序归还给我。如何在WHERE条款(1,2,3)中按顺序显示它们?

4 个答案:

答案 0 :(得分:2)

我认为您正在寻找FIELD

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

无论如何,如果名字按字母顺序排列,请使用:

ORDER BY name

另请注意,使用IN运算符通常比使用许多OR运算符更快。

答案 1 :(得分:1)

您需要在order by子句中使用FIELD。 returnset将与您编写的顺序相同。

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

结果: module1,module2,name3

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

结果: module2,module1,name3

答案 2 :(得分:0)

我认为你的问题有一个错字。您的上一个条件应为name = 'module3',而不仅仅是name3

请尝试以下方法:

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

答案 3 :(得分: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