2010-11-30 97 views
6

我使用了一个mysql查询,其中有“where id in(”22,20,21“)” 但是当我得到结果时,它的数组按照升序排序,即20,21, 20“where in”mysql clause

,但我需要它以相同的顺序,因为我给了该条款,除非给出明确排序

+0

什么是完整查询? – cambraca 2010-11-30 06:11:58

+0

可能重复[如何命令查询结果与在WHERE条件中指定的id相同?](http://stackoverflow.com/questions/3984531/how-can-i-order-a-query-result-相同的ID在指定的在哪里条件) – deceze 2010-11-30 06:14:52

+0

我同意@deceze它是重复的。没有看到你的答案,或者可能会指出他在那个方向。 – 2010-11-30 06:20:09

回答

18

认为你应该能够使用该字段关键字,像这样:

SELECT * FROM table 
WHERE id in (22,20,21) 
ORDER BY FIELD(id,22,20,21); 

这是MySQL的具体,似乎不可思议,但它的作品。

2

SQL结果是无序的;该订单不会从in条款中获取。

既然ID既不是ASC也不是DESC,你必须ORDER BY别的东西;你如何确定22,20,21的订单呢?

0

您无法指定订单结果将返回到WHERE子句中。如果您要指定订单,则需要为查询添加ORDER BY子句。对于使用FIND_IN_SET的解决方案,请参阅this answer

2

如前所述...... WHERE子句对结果集的排序没有任何作用。使用MySQL built-in FIELD functionORDER BY子句指定结果集应如何下令:

... WHERE id IN (22, 20, 21) ORDER BY FIELD(id, 22, 20, 21) ... 
0

一般来说,数据库系统返回任何顺序感觉的结果。如果你想要订购它,你必须告诉它。 This blog post提供了这样做的一种方法;您可以在网上找到其他解决方案。