我正在使用此查询:
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相同的顺序对结果进行排序?
答案 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 )