如何在MySQL查询结果中禁用升序或降序排序,并按查询语句指定的顺序返回数据?
MySQL查询排序问题详解
嘿,我来帮你搞定这两个MySQL排序的问题~
一、关于禁用升/降序排序
首先要纠正一个常见误解:MySQL并没有默认的升序排序逻辑。当你不写ORDER BY子句时,查询结果的顺序其实是“未定义”的——有时候看起来像是按主键升序排列,那只是因为InnoDB这类存储引擎会按聚簇索引的顺序返回数据,并不是MySQL强制的默认排序。
如果你的需求是不要刻意做升/降序排序,那很简单:直接去掉ORDER BY子句就好。但要注意这种情况下,结果顺序可能会因为数据更新、表结构调整甚至存储引擎的变化而改变,绝对不能依赖这个顺序来做业务逻辑哦。
二、让结果按指定的postalcode顺序返回
针对你给出的查询例子,要让结果严格按照IN里的'13008','12209','05022'顺序返回,用MySQL的FIELD()函数配合ORDER BY就可以完美解决。
修改后的完整查询语句:
SELECT postalcode, customername, contactname, * FROM customers WHERE postalcode IN ('13008','12209','05022') ORDER BY FIELD(postalcode, '13008','12209','05022');
简单解释下原理:
FIELD()函数的作用是返回第一个参数在后续参数列表中的位置序号:
- 当
postalcode等于'13008'时,FIELD()返回1 - 等于
'12209'时返回2 - 等于
'05022'时返回3
通过ORDER BY这个序号,结果就会严格按照你指定的顺序排列啦。如果有不在这个列表里的记录(不过你的WHERE条件已经限定了IN,所以不会出现),它们会被排在最后。
内容的提问来源于stack exchange,提问作者Fitzmerl Duron
相关产品推荐
相关产品推荐

