朱瑞祥 发表于 2024-5-26 06:31:52

MySQL 中 FIELD() 自定义排序示例详解

MySQL 中 FIELD() 自定义排序

在 MySQL 中,你可以使用 ORDER BY FIELD() 来自定义排序顺序。这个函数允许你指定字段的自定义排序顺序,而不是默认的升序或降序排序。以下是一个简单的例子:
假设你有一个表格叫做 products,其中有一个字段叫做 category,你想按照特定的类别顺序进行排序,比如 'Electronics', 'Clothing', 'Books',你可以这样做:
SELECT * FROM products
ORDER BY FIELD(category, 'Electronics', 'Clothing', 'Books');这个查询会按照 'Electronics'、'Clothing' 和 'Books' 的顺序来排序 category 字段。
你也可以结合其他的排序条件,比如:
SELECT * FROM products
ORDER BY FIELD(category, 'Electronics', 'Clothing', 'Books'), price ASC;补充:MySQL中函数field()的用法

MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序。
函数使用格式如下:
order by (str,str1,str2,str3,str4……),str与str1,str2,str3,str4比较,其中str指的是字段名字,
意为:字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3,str4中的记录,放在结果集最前面返回。
例:
表数据如下:
root@localhost|iris>select * from ta;
+----+--------+------+-------+
| id | name   | age| class |
+----+--------+------+-------+
|1 | iris   |   11 | a1    |
|2 | iris   |   22 | a2    |
|3 | seiki|   33 | a3    |
|4 | seiki|   44 | a4    |
|5 | xuding |   55 | a5    |
|6 | xut    |   66 | a6    |
|7 | iris   |   12 | a2    |
|8 | iris   |   24 | a4    |
|9 | seiki|   36 | a6    |
| 10 | seiki|   48 | a8    |
| 11 | xuding |   50 | a0    |
| 12 | xut    |   77 | a7    |
+----+--------+------+-------+
12 rows in set (0.00 sec)按照'seiki','iris','xut'来排序,结果如下:
root@localhost|iris>select * from ta order by field(name,'seiki','iris','xut');
+----+--------+------+-------+
| id | name   | age| class |
+----+--------+------+-------+#不在str1,str2,str3中的内容,放在最前面返回,str值相同按照主键的顺序
|5 | xuding |   55 | a5    |
| 11 | xuding |   50 | a0    |
|3 | seiki|   33 | a3    |
|4 | seiki|   44 | a4    |
|9 | seiki|   36 | a6    |
| 10 | seiki|   48 | a8    |
|1 | iris   |   11 | a1    |
|2 | iris   |   22 | a2    |
|7 | iris   |   12 | a2    |
|8 | iris   |   24 | a4    |
|6 | xut    |   66 | a6    |
| 12 | xut    |   77 | a7    |
+----+--------+------+-------+
12 rows in set (0.00 sec)按照'seiki','iris'来排序,结果如下:
root@localhost|iris>select * from ta order by field(name,'seiki','iris');
+----+--------+------+-------+
| id | name   | age| class |
+----+--------+------+-------+#不在str1,str2,str3中的内容,放在最前面返回;str值相同按主键顺序排列
|5 | xuding |   55 | a5    |
|6 | xut    |   66 | a6    |
| 11 | xuding |   50 | a0    |
| 12 | xut    |   77 | a7    |
|3 | seiki|   33 | a3    |
|4 | seiki|   44 | a4    |
|9 | seiki|   36 | a6    |
| 10 | seiki|   48 | a8    |
|1 | iris   |   11 | a1    |
|2 | iris   |   22 | a2    |
|7 | iris   |   12 | a2    |
|8 | iris   |   24 | a4    |
+----+--------+------+-------+
12 rows in set (0.00 sec)按照'seiki','iris' desc 来排序,结果如下:
root@localhost|iris>select * from ta order by field(name,'seiki','iris') desc;
+----+--------+------+-------+
| id | name   | age| class |
+----+--------+------+-------+
|1 | iris   |   11 | a1    |
|2 | iris   |   22 | a2    |
|7 | iris   |   12 | a2    |
|8 | iris   |   24 | a4    |
|3 | seiki|   33 | a3    |
|4 | seiki|   44 | a4    |
|9 | seiki|   36 | a6    |
| 10 | seiki|   48 | a8    |#倒序时,按照str3,str2,str1的顺序逆向排序,
|5 | xuding |   55 | a5    |#不在str1,str2,str3中的记录放到最后;str值相同按主键顺序排列
|6 | xut    |   66 | a6    |
| 11 | xuding |   50 | a0    |
| 12 | xut    |   77 | a7    |
+----+--------+------+-------+这个查询会先按照指定的类别顺序排序,然后在每个类别内按照价格升序排序。
到此这篇关于MySQL 中 FIELD() 自定义排序的文章就介绍到这了,更多相关MySQL 自定义排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/3210782ja.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MySQL 中 FIELD() 自定义排序示例详解