mysql中有task表,表中有state字段,字段值分为0,1,2,10,12,13,有time字段
要求查询排序1在前,之后是0,再之后2,10,12按time字段倒序排列,请问sql语句怎么写
不用那么复杂, 使用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
试了,方法可行,谢了
select * from task order by state
有要求的,不能直接排序,,,,,,
@软件杨威: 可以用union联合查询,(...<0)union(....order by..)
@软件杨威: 你可以试一试我也不确定
@软件杨威: 逻辑有点问题,你捋一捋条件救行了,union目测可以
@杨俊朗: 不可以,用union的话两次查出来合并数据之后就会成为按state排序的了
我有个 思路 首先你不是说1在前 那你单独查出来1 完后 union 按时间按时间排序 然后not in(1) 这个肯定行
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.。。
@软件杨威: 我的意思是这样的啊。。。。
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
可以自己定义order by的顺序,语法百度或者参考https://blog.csdn.net/wangshuai6707/article/details/46710573
自定义排序顺序试过了,不太一样,楼上大神说的方法可行,