当谈到 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 时,您不能相信以特定顺序返回结果的方式。
最佳答案
您可以使用FIELD()
功能。在您将动态创建此 SQL 的应用程序代码中,您可以按照 FIELD()
的相同顺序构建 SQL 字符串,如 WHERE
子句中一样。
FIELD(str,str1,str2,str3,...)
Returns the index (position) of str in the str1, str2, str3, ... list. Returns 0 if str is not found.
现在,如果 id
,则 FIELD(id, 1,2,5,6,100,1000,4)
函数将返回 0不在 (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
关于mysql 默认排序顺序与特定选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52643777/