mysql具有特定选择的默认排序顺序

ddrv8njm  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(339)

当谈到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没有被使用时,您不能相信结果是以特定的顺序返回的。

8fsztsew

8fsztsew1#

你可以用 FIELD() 功能。在应用程序代码中,您将动态地创建这个sql,您可以按照相同的顺序构建sql字符串 FIELD() ,就像你的 WHERE 条款。

FIELD(str,str1,str2,str3,...)

返回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() 功能。

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

相关问题