1

我有这个按顺序排列的问题,我无法破解。我从我的表中选择这样的:

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

它返回了我想要的模块。但是模块位于桌子上,按以下顺序说:

  1. 模块3
  2. 模块1
  3. 模块2

它们按此顺序归还给我。我怎样才能让它们按照WHERE条款 (1,2,3) 中的顺序显示?

4

4 回答 4

2

我想你正在寻找FIELD

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

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

ORDER BY name

另请注意,使用IN运算符通常比仅使用 many 更快OR

于 2012-04-15T17:06:31.453 回答
1

您需要按子句顺序使用 FIELD。returnset 将与您编写的顺序相同。

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

结果:模块1,模块2,名称3

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

结果:模块2,模块1,名称3

于 2012-04-15T17:18:59.820 回答
0

我认为您的问题中有错字。您的最后一个条件应该name = 'module3'name3

请尝试以下方法:

SELECT * 
FROM 'sidemodules' 
WHERE name = 'module1' OR name = 'module2' OR name = 'module3'
ORDER BY name;
于 2012-04-15T17:06:58.510 回答
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
于 2012-04-15T17:08:56.550 回答