开发者

How can I order a query result same as the id specified in the WHERE condition?

开发者 https://www.devze.com 2023-01-21 05:32 出处:网络
I have a query like this SELECT * FROM test JOIN test2 ON test.id=test2.id WHERE test.id IN (562,553,572)

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

精彩评论

暂无评论...
验证码 换一张
取 消