views:

119

answers:

2

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 :)

+11  A: 

Use FIND_IN_SET:

ORDER BY FIND_IN_SET(id, '56,55,54,1,7')
OMG Ponies
+1 - I never thought about that. Good Idea
webdestroya
Thanks! That was fast. It works perfectly :)
Pepper
One question, this causes the query to use a filesort. Should I be concerned with performance using this method? Or is this a question for a different thread?
Pepper
@Pepper: http://www.mysqlperformanceblog.com/2009/03/05/what-does-using-filesort-mean-in-mysql/
OMG Ponies
Very helpful, thanks!
Pepper
Great stuff! ---
Pekka
A: 

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?

webdestroya
The DB will scale the ordering far better than your application ever could. 10 records is nothing - what if the result set is 10,000, or millions?
OMG Ponies