当前位置: 代码网 > it编程>数据库>Mysql > MySQL 中 FIELD() 自定义排序示例详解

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

2024年05月26日 Mysql 我要评论
mysql 中 field() 自定义排序在 mysql 中,你可以使用order by 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 自定义排序内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com