Как я могу упорядочить результат запроса так же, как идентификатор, указанный в условии WHERE?

У меня такой запрос

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');