我有这个订单问题,我可以破解。我从我的桌子中选择如下:
SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'
它返回了我想要的模块。但是模块就在这个表中,按顺序说:
他们按此顺序归还给我。如何在WHERE
条款(1,2,3)中按顺序显示它们?
答案 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