How do you keep the order using SELECT WHERE IN()?

眉间皱痕 提交于 2019-11-27 12:23:30

问题


Is there a way to keep the order when using SELECT WHERE IN()? For example, using the following query:

SELECT id FROM data_table WHERE id IN(56,55,54,1,7);

The results will come back using the default order by id. 1,7,54,55,56

When I want to keep the order used in the IN: 56,55,54,1,7

Is there a quick way to do this in mySQL or will I be forced to order it after in code.

Thanks :)


回答1:


Use FIND_IN_SET:

ORDER BY FIND_IN_SET(id, '56,55,54,1,7')



回答2:


You can also use FIELD:

ORDER BY FIELD(id, '56,55,54,1,7')
  • http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field
  • http://ivanjovanovic.com/2008/04/01/preserving-ordering-with-where-in-clause-in-mysql/



回答3:


You could do a UNION, that might return the order the same way.

BUT:

Why not just have your application reorder the results when it receives them, rather than forcing the DB to do it?



来源:https://stackoverflow.com/questions/2813884/how-do-you-keep-the-order-using-select-where-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!