I have a query like this
SELECT *
FROM test JOIN test2 ON test.id=test2.id
WHERE test.id IN (562,553,572)
GROUP BY test.id
Its results are ordered like this: 553, 562, 572...
But I need the same order that I specified开发者_如何学运维 in the IN(562,553,572)
condition.
You can do this using 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
One way is like this:
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;
You don't need GROUP BY unless you are computing aggregates. The ELSE clause is superfluous here, but it is generally a good idea to include it.
Could do something with 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');
精彩评论