替代union all 复杂的sql 并且可以接着双重排序,最主要的是他避免了一条语句两(多)条order by 插件默认执行第一个结束
2018-01-16 14:09
489 查看
转载:http://blog.tanteng.me/2013/11/mysql-order-by-field/
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、4,如遇到null或者不在列表中的数据则返回0. 这个函数好像Oracle中没有专门提供(也可能是我没有用到),不过自己实现这样一个函数还是比较简单的。
mysql> select * from 表名 order by field(id,4,2,3,1);
+——–+——–+————+——-+
| id | name
+——–+——–+————+——-+
| 4 |
| 2 |
| 3 |
| 1 |
+——–+—— -+————+——-+
那么它就会按照id为4,2,3,1的顺序排序
根据id字段自定义排序
mysql> select * from 表名 order by field(id,1,4,2,3) desc;
+——–+——–+————+——-+
| id | name
+——–+——–+————+——-+
| 3 |
| 2 |
| 4 |
| 1 |
+——–+—— -+————+——-+
根据wp_posts表ID字段自定义排序:
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、4,如遇到null或者不在列表中的数据则返回0. 这个函数好像Oracle中没有专门提供(也可能是我没有用到),不过自己实现这样一个函数还是比较简单的。
mysql> select * from 表名 order by field(id,4,2,3,1);
+——–+——–+————+——-+
| id | name
+——–+——–+————+——-+
| 4 |
| 2 |
| 3 |
| 1 |
+——–+—— -+————+——-+
那么它就会按照id为4,2,3,1的顺序排序
根据id字段自定义排序
mysql> select * from 表名 order by field(id,1,4,2,3) desc;
+——–+——–+————+——-+
| id | name
+——–+——–+————+——-+
| 3 |
| 2 |
| 4 |
| 1 |
+——–+—— -+————+——-+
根据wp_posts表ID字段自定义排序:
相关文章推荐
- SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序? group by 语句执行后记录会按关键字自动升序吗?
- 如何让SQL语句不执行默认排序,而是按照in语句的顺序返回结果
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。
- oracle 查询重复数据并且删除, 只保留一条数据的SQL语句
- NOT EXISTS替代NOT IN EXISTS替换DISTINCT 识别‘低效执行’的SQL语句
- SQL语句中,为什么where子句不能使用列别名,而order by却可以?
- sql语句 不让得出的结果默认排序,让其按照in语句的顺序返回结果
- DBA手记 - optimizer_mode影响一个SQL语句是否可以执行
- 如何判断一条sql(update,delete)语句是否执行成功
- sql语句中where、group by、having、order by 是否可以使用别名
- SQL语句中,为什么where子句不能使用列别名,而order by却可以?
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- 获取一条SQL语句执行了多少时间
- 自动在多个DB上执行同一条sql语句 ( 存储过程版 )
- NOT EXISTS替代NOT IN 和 EXISTS替换DISTINCT 识别‘低效执行’的SQL语句
- SQL语句order by两个字段同时排序。
- Hibernate SQLQuery查询返回空List,在mysql命令下直接执行sql语句可以正常得到记录
- 一条sql语句具体执行过程
- sql语句or与union all的执行效率比较