mysql 默认排序顺序与特定选择

标签 mysql

当谈到 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/

相关文章:

用于正确连接的 MySQL 字符串操作

mysql - 导出和导入 mysql 数据库的最佳实践是什么?

javascript - 删除表行jquery

php - 首次登录时显示欢迎消息

mysql - 在mysql中传入2个值(经度和经度)时如何获取以公里为单位的距离?

php - 推进 "AND NOT"查询

mysql - 如何选择按范围分组的值的计数

php - PHP HTML 中的俄语

mysql - 如何编写查询以获得该结果

mySQL:如何获取产品属性的 attribute_id?