我有这个按顺序排列的问题,我无法破解。我从我的表中选择这样的:
SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'
它返回了我想要的模块。但是模块位于桌子上,按以下顺序说:
- 模块3
- 模块1
- 模块2
它们按此顺序归还给我。我怎样才能让它们按照WHERE
条款 (1,2,3) 中的顺序显示?
我有这个按顺序排列的问题,我无法破解。我从我的表中选择这样的:
SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'
它返回了我想要的模块。但是模块位于桌子上,按以下顺序说:
它们按此顺序归还给我。我怎样才能让它们按照WHERE
条款 (1,2,3) 中的顺序显示?
我想你正在寻找FIELD
:
SELECT * FROM sidemodules
WHERE name IN ('module1', 'module2', 'name3')
ORDER BY FIELD(name, 'module1', 'module2', 'name3')
无论如何,如果名称按字母顺序排列,请使用:
ORDER BY name
另请注意,使用IN
运算符通常比仅使用 many 更快OR
。
您需要按子句顺序使用 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
我认为您的问题中有错字。您的最后一个条件应该name = 'module3'
是name3
请尝试以下方法:
SELECT *
FROM 'sidemodules'
WHERE name = 'module1' OR name = 'module2' OR name = 'module3'
ORDER BY name;
如果您有固定订单,您可以使用 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