mysql 5.7 5.6排序_mysql双向排序mysql5.6和5.7的sql语句不一样

数据库内容如下:

mysql> select * from test;

+—-+—————–+———————+

| id | name | create_time |

+—-+—————–+———————+

| 1 | 张三 | 2018-01-10 10:47:56 |

| 2 | 李四 | 2018-01-10 11:48:15 |

| 3 | 老虎 | 2018-01-10 12:48:41 |

| 4 | 猴子 | 2018-01-11 09:49:01 |

| 5 | 大蟒蛇 | 2018-01-11 10:49:33 |

| 6 | 地狱双头犬 | 2018-01-11 10:51:37 |

| 7 | 电视机 | 2018-01-13 11:25:02 |

| 8 | 发财树 | 2018-01-12 11:25:29 |

| 9 | 咖啡杯 | 2018-01-12 16:25:40 |

+—-+—————–+———————+

9 rows in set (0.00 sec)

这个表里有9条数据,创建时间有两天的。

现在需求如下:1月11号以前的数据按id从小到大排序,1月11号之后的所有数据按id从大到小排序,然后合并两个结果集。

mysql> (select * from (select * from test where create_time > now() order by id desclimit 999) a )

-> union DISTINCT

-> (select * from (select * from test where create_time < now() order by id asclimit 999) a )

-> ;

+—-+—————–+———————+

| id | name | create_time |

+—-+—————–+———————+

| 9 | 咖啡杯 | 2018-01-12 16:25:40 |

| 8 | 发财树 | 2018-01-12 11:25:29 |

| 7 | 电视机 | 2018-01-13 11:25:02 |

| 1 | 张三 | 2018-01-10 10:47:56 |

| 2 | 李四 | 2018-01-10 11:48:15 |

| 3 | 老虎 | 2018-01-10 12:48:41 |

| 4 | 猴子 | 2018-01-11 09:49:01 |

| 5 | 大蟒蛇 | 2018-01-11 10:49:33 |

| 6 | 地狱双头犬 | 2018-01-11 10:51:37 |

+—-+—————–+———————+

9 rows in set (0.01 sec)

上面红色的的limit 999是mysql5.7之后的版本都需要加上的,否则排序不会成功,5.6和之前的版本则不需要添加limit。

上面的语句中的now(),可以写的更精确,精确到年月日时分秒:“2018-01-11 12:20:58”,这样也可以。

主要办法就是用多条语句查询结果,并使用union将多个结果集合并即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值