首页 新闻 会员 周边

mysql排序问题。特定字段值某些在前某些在后

0
悬赏园豆:10 [已解决问题] 解决于 2018-05-21 13:57

mysql中有task表,表中有state字段,字段值分为0,1,2,10,12,13,有time字段

要求查询排序1在前,之后是0,再之后2,10,12按time字段倒序排列,请问sql语句怎么写

软件杨威的主页 软件杨威 | 初学一级 | 园豆:26
提问于:2018-05-21 10:46
< >
分享
最佳答案
0

不用那么复杂, 使用case when else end语句, 根据state字段值构建一个字段sort进行排序, 当state=1的时候, 让sort的值为0, 当state=0的时候, 让sort的值为1, 当state为其他值时, 让sort的值为2, 然后再根据time进行倒序, 就是你想要的结果
select
    *, ( case when state = '1' then '0' when state = '0' then '1' else '2' end) AS sort
from task
order by sort asc, time desc

收获园豆:10
、熙和 | 小虾三级 |园豆:1508 | 2018-05-21 12:18

试了,方法可行,谢了

软件杨威 | 园豆:26 (初学一级) | 2018-05-21 13:56
其他回答(3)
0

select * from task order by state

杨俊朗 | 园豆:204 (菜鸟二级) | 2018-05-21 11:01

有要求的,不能直接排序,,,,,,

支持(0) 反对(0) 软件杨威 | 园豆:26 (初学一级) | 2018-05-21 11:02

@软件杨威: 可以用union联合查询,(...<0)union(....order by..)

支持(0) 反对(0) 杨俊朗 | 园豆:204 (菜鸟二级) | 2018-05-21 11:09

@软件杨威: 你可以试一试我也不确定

支持(0) 反对(0) 杨俊朗 | 园豆:204 (菜鸟二级) | 2018-05-21 11:09

@软件杨威: 逻辑有点问题,你捋一捋条件救行了,union目测可以

支持(0) 反对(0) 杨俊朗 | 园豆:204 (菜鸟二级) | 2018-05-21 11:13

@杨俊朗: 不可以,用union的话两次查出来合并数据之后就会成为按state排序的了

支持(0) 反对(0) 软件杨威 | 园豆:26 (初学一级) | 2018-05-21 11:17
0

我有个 思路  首先你不是说1在前 那你单独查出来1 完后 union 按时间按时间排序 然后not in(1) 这个肯定行

曾将 | 园豆:271 (菜鸟二级) | 2018-05-21 11:38

WHERE (t.`state` < 2)
AND (t.`isDelete` = 0)
ORDER BY t.state DESC,
t.`orderTime` DESC

这是第一个查询的条件

WHERE (t.`state` < 13 AND t.`state`>1)
AND (t.`isDelete` = 0)
ORDER BY
t.`orderTime` DESC )

这是第二个查询的条件,

查询出来之后会是0,1,2.。。

支持(0) 反对(0) 软件杨威 | 园豆:26 (初学一级) | 2018-05-21 11:54

@软件杨威: 我的意思是这样的啊。。。。

select * from task where state=1 union
select * from task where state=0 union
select *from task where state not in (1,0) arder by time

支持(0) 反对(0) 曾将 | 园豆:271 (菜鸟二级) | 2018-05-21 13:28
0

可以自己定义order by的顺序,语法百度或者参考https://blog.csdn.net/wangshuai6707/article/details/46710573

小光 | 园豆:1766 (小虾三级) | 2018-05-21 13:52

自定义排序顺序试过了,不太一样,楼上大神说的方法可行,

支持(0) 反对(0) 软件杨威 | 园豆:26 (初学一级) | 2018-05-21 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册