当谈到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,因为我需要的是我第一次选择它们的方式。一个简单的测试证实了它是以这种方式返回的,但是从其他地方的阅读中我得到了这样一个想法:当orderby没有被使用时,您不能相信结果是以特定的顺序返回的。
1条答案
按热度按时间8fsztsew1#
你可以用
FIELD()
功能。在应用程序代码中,您将动态地创建这个sql,您可以按照相同的顺序构建sql字符串FIELD()
,就像你的WHERE
条款。返回str1,str2,str3。。。列表。如果找不到str,则返回0。
现在
FIELD(id, 1,2,5,6,100,1000,4)
如果id
不在(1,2,5,6,100,1000,4)
.所以,如果我们使用
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()
功能。