MySQL WHERE IN结果乱序

时间:2011-08-22 19:59:29

标签: mysql

我正在使用此查询:

SELECT * FROM `challenges` WHERE id IN (#, #, #, #)

其中#是与单行关联的4个ID号。这很好用,因为它允许我在一个查询中从表中提取4行,但是它有一个奇怪的问题。我不知道它为什么会这样,但结果中行的顺序与我在查询中的顺序不一样。例如:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142)

我希望他们按照这个顺序出来,但他们却这样出来了:

108,134,142,208

我唯一注意到的是challenge表中的每一行都有一个名为“first_recorded”的字段,来自该查询的行的顺序按该字段按升序排序。有没有办法强制查询以与订购ID相同的顺序对结果进行排序?

4 个答案:

答案 0 :(得分:5)

您需要按field

订购
SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY FIELD(id, 108,208,134,142)

答案 1 :(得分:3)

你可以按字段使用mysql命令:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY FIELD(id, 108, 208, 134, 142);

答案 2 :(得分:1)

您必须将查询更改为此。

SELECT * FROM `challenges` 
WHERE id IN (108, 208, 134, 142)
ORDER BY ID

如果您希望它们以与in语句相同的方式排序,无论数字排序如何,您都可以使用以下内容。

SELECT * FROM `challenges` 
WHERE id IN (108, 208, 134, 142)
ORDER BY FIELD(id,108,208,134,142)

答案 3 :(得分:1)

无法保证结果按顺序排列,您应明确指定ORDER BY子句。如果要按id值排序:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142) ORDER BY id

任意订单:

SELECT * FROM `challenges` WHERE id IN (108, 208, 134, 142)
  ORDER BY FIELD( id, 108, 208, 134, 142 )