2011-08-22 34 views
1

我使用这个查询:的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相同的顺序排列结果?

+1

http://stackoverflow.com/questions/4858828/sql-where-in-sort-by-order我认为这是一个类似于你的问题。 – prakashkut

+0

哎呀,对不起。我搜索了大约10分钟,但找不到任何东西(诚然,我的谷歌搜索技能并不是那么好)。当我输入问题标题时,我甚至没有想到。 – HaLo2FrEeEk

回答

5

你需要按field

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

这比我使用的解决方案更优雅,它基本上说'ORDER BY id = 108,id = 208,id = 134,id = 142'。谢谢! – HaLo2FrEeEk

3

可以通过现场使用mysql命令:

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

你要查询改变了这一点。

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