我有这样的查询
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)
条件中指定的相同顺序。
答案 0 :(得分:10)
您可以使用FIELD()
执行此操作:
SELECT ... ORDER BY FIELD(`test`.`id`, 562, 553, 572)
答案 1 :(得分:2)
ORDER BY CASE test.id
WHEN 562 THEN 0
WHEN 553 THEN 1
WHEN 572 THEN 2
END
答案 2 :(得分:2)
一种方式是这样的:
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子句在这里是多余的,但包含它通常是一个好主意。
答案 3 :(得分:2)
可以使用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');