[英]How can I order a query result same as the id specified in the WHERE condition?
我有这样的查询
SELECT *
FROM test JOIN test2 ON test.id=test2.id
WHERE test.id IN (562,553,572)
GROUP BY test.id
其结果如下:553,562,572 ......
但是我需要在IN(562,553,572)
条件下指定的相同顺序。
您可以使用FIELD()
执行此操作:
SELECT ... ORDER BY FIELD(`test`.`id`, 562, 553, 572)
ORDER BY CASE test.id WHEN 562 THEN 0 WHEN 553 THEN 1 WHEN 572 THEN 2 END
一种方法是这样的:
SELECT *
FROM test JOIN test2 ON test.id=test2.id
WHERE test.id IN (562,553,572)
ORDER BY CASE test.id
WHEN 562 THEN 1
WHEN 553 THEN 2
WHEN 572 THEN 3
ELSE 4
END;
除非您正在计算聚合,否则不需要GROUP BY。 ELSE子句在这里是多余的,但包含它通常是个好主意。
可以用FIND_IN_SET()做一些事情:
SELECT *
FROM test
JOIN test2
ON test.id = test2.id
WHERE test.id IN (562,553,572)
ORDER BY FIND_IN_SET(test.id, '562,553,572');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.