翼度科技»论坛 编程开发 mysql 查看内容

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

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
MySQL 中 FIELD() 自定义排序

在 MySQL 中,你可以使用
  1. ORDER BY FIELD()
复制代码
来自定义排序顺序。这个函数允许你指定字段的自定义排序顺序,而不是默认的升序或降序排序。以下是一个简单的例子:
假设你有一个表格叫做
  1. products
复制代码
,其中有一个字段叫做
  1. category
复制代码
,你想按照特定的类别顺序进行排序,比如
  1. 'Electronics', 'Clothing', 'Books'
复制代码
,你可以这样做:
  1. SELECT * FROM products
  2. ORDER BY FIELD(category, 'Electronics', 'Clothing', 'Books');
复制代码
这个查询会按照
  1. 'Electronics'
复制代码
  1. 'Clothing'
复制代码
  1. 'Books'
复制代码
的顺序来排序
  1. category
复制代码
字段。
你也可以结合其他的排序条件,比如:
  1. SELECT * FROM products
  2. 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中的记录,放在结果集最前面返回。
例:
表数据如下:
  1. root@localhost|iris>select * from ta;
  2. +----+--------+------+-------+
  3. | id | name   | age  | class |
  4. +----+--------+------+-------+
  5. |  1 | iris   |   11 | a1    |
  6. |  2 | iris   |   22 | a2    |
  7. |  3 | seiki  |   33 | a3    |
  8. |  4 | seiki  |   44 | a4    |
  9. |  5 | xuding |   55 | a5    |
  10. |  6 | xut    |   66 | a6    |
  11. |  7 | iris   |   12 | a2    |
  12. |  8 | iris   |   24 | a4    |
  13. |  9 | seiki  |   36 | a6    |
  14. | 10 | seiki  |   48 | a8    |
  15. | 11 | xuding |   50 | a0    |
  16. | 12 | xut    |   77 | a7    |
  17. +----+--------+------+-------+
  18. 12 rows in set (0.00 sec)
复制代码
按照'seiki','iris','xut'来排序,结果如下:
  1. root@localhost|iris>select * from ta order by field(name,'seiki','iris','xut');
  2. +----+--------+------+-------+
  3. | id | name   | age  | class |
  4. +----+--------+------+-------+#不在str1,str2,str3中的内容,放在最前面返回,str值相同按照主键的顺序
  5. |  5 | xuding |   55 | a5    |
  6. | 11 | xuding |   50 | a0    |
  7. |  3 | seiki  |   33 | a3    |
  8. |  4 | seiki  |   44 | a4    |
  9. |  9 | seiki  |   36 | a6    |
  10. | 10 | seiki  |   48 | a8    |
  11. |  1 | iris   |   11 | a1    |
  12. |  2 | iris   |   22 | a2    |
  13. |  7 | iris   |   12 | a2    |
  14. |  8 | iris   |   24 | a4    |
  15. |  6 | xut    |   66 | a6    |
  16. | 12 | xut    |   77 | a7    |
  17. +----+--------+------+-------+
  18. 12 rows in set (0.00 sec)
复制代码
按照'seiki','iris'来排序,结果如下:
  1. root@localhost|iris>select * from ta order by field(name,'seiki','iris');
  2. +----+--------+------+-------+
  3. | id | name   | age  | class |
  4. +----+--------+------+-------+#不在str1,str2,str3中的内容,放在最前面返回;str值相同按主键顺序排列
  5. |  5 | xuding |   55 | a5    |
  6. |  6 | xut    |   66 | a6    |
  7. | 11 | xuding |   50 | a0    |
  8. | 12 | xut    |   77 | a7    |
  9. |  3 | seiki  |   33 | a3    |
  10. |  4 | seiki  |   44 | a4    |
  11. |  9 | seiki  |   36 | a6    |
  12. | 10 | seiki  |   48 | a8    |
  13. |  1 | iris   |   11 | a1    |
  14. |  2 | iris   |   22 | a2    |
  15. |  7 | iris   |   12 | a2    |
  16. |  8 | iris   |   24 | a4    |
  17. +----+--------+------+-------+
  18. 12 rows in set (0.00 sec)
复制代码
按照'seiki','iris' desc 来排序,结果如下:
  1. root@localhost|iris>select * from ta order by field(name,'seiki','iris') desc;
  2. +----+--------+------+-------+
  3. | id | name   | age  | class |
  4. +----+--------+------+-------+
  5. |  1 | iris   |   11 | a1    |
  6. |  2 | iris   |   22 | a2    |
  7. |  7 | iris   |   12 | a2    |
  8. |  8 | iris   |   24 | a4    |
  9. |  3 | seiki  |   33 | a3    |
  10. |  4 | seiki  |   44 | a4    |
  11. |  9 | seiki  |   36 | a6    |
  12. | 10 | seiki  |   48 | a8    |#倒序时,按照str3,str2,str1的顺序逆向排序,
  13. |  5 | xuding |   55 | a5    |#不在str1,str2,str3中的记录放到最后;str值相同按主键顺序排列
  14. |  6 | xut    |   66 | a6    |
  15. | 11 | xuding |   50 | a0    |
  16. | 12 | xut    |   77 | a7    |
  17. +----+--------+------+-------+
复制代码
这个查询会先按照指定的类别顺序排序,然后在每个类别内按照价格升序排序。
到此这篇关于MySQL 中 FIELD() 自定义排序的文章就介绍到这了,更多相关MySQL 自定义排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/3210782ja.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具