关于MySQL如何对结果进行排序,我得到了很多答案,但似乎没有一个能解决我的特定问题。希望我不会在stackoverflow上的其他地方错过答案。
我有一个如下所示的SQL查询:
SELECT id, something FROM sometable WHERE
id=1 OR id=2 OR id=5 OR
id=6 OR id=100 OR id=1000
OR id=4
现在,我需要它以已选择的特定顺序返回结果。结果应按以下特定顺序显示:
1
2
5
6
100
1000
4
MYSQL将以我选择它们的特定顺序显示返回的记录吗?我无法使用ORDER BY,因为我需要它们与我在第一个实例中选择它们的确切方式。一个简单的测试确认它是以这种方式返回的,但是从其他地方阅读后,我得到了一个想法,当不使用ORDER BY时,您不能相信以特定顺序返回结果的方式。
答案 0 :(得分:1)
您可以使用FIELD()
功能。在应用程序代码中,您将在其中动态创建此SQL,可以像在FIELD()
子句中一样,为WHERE
构建SQL字符串。
FIELD(str,str1,str2,str3,...)
返回str1,str2,str3,...列表中str的索引(位置)。 如果找不到str,则返回0。
现在,如果FIELD(id, 1,2,5,6,100,1000,4)
不在id
中,则(1,2,5,6,100,1000,4)
函数将返回 0 。
因此,如果仅使用ORDER BY FIELD(id, 1,2,5,6,100,1000,4)
,则其他不匹配行将显示在顶部。因此,我们可以使用If()
函数为其他不匹配行返回 1 ,为匹配的行返回 0 。
现在,我们可以使用FIELD(id, 1,2,5,6,100,1000,4)
的另一种排序方式。这样可以确保匹配的ID按照Field()
函数中指定的顺序首先出现。
SELECT id, something FROM sometable WHERE
id=1 AND id=2 AND id=5 AND
id=6 AND id=100 AND id=1000
AND id=4
ORDER BY IF(FIELD(id, 1,2,5,6,100,1000,4) = 0, 1, 0) ASC,
FIELD(id, 1,2,5,6,100,1000,4) ASC