У меня такой запрос
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');