
有两个思路
1、按照各自的活动状态先排序,插入到临时表,最后再union all所有结果集
create temporary table tmp1select * from tb where 活动状态='筹备中' order by 开始时间
create temporary table tmp2
select * from tb where 活动状态='进行中' and 开始时间 is not null order by 开始时间
create temporary table tmp3
select * from tb where 活动状态='进行中' and 开始时间 is null
create temporary table tmp4
select * from tb where 活动状态='已结束' order by 开始时间 desc
(select * from tmp1)
union all
(select * from tmp2)
union all
(select * from tmp3)
union all
(select * from tmp4)
2、通过field函数自定义排序
select * from tb order by field(活动状态,'筹备中','进行中','已结束') asc,开始时间 asc
但这种只能按指定排序,你这种多种排序,有困难。
可以看看上面两种方法结合或许有更好的方法。
不太理解你的需求。你所谓的上一篇是下一篇是什么意思?是说某一篇文章的上一篇文章和它的下一篇文章吗?还是说上一页和下一页数据?你的SQL中得到的应该也不是一条数据吗?应该是多条数据。这个多条数据就是你所谓的上一篇数据吗?
sql 添加自定义排序
Mysql :
SELECT (@i:=@i+1) AS ind ,字段 FROM 表名 别名, (SELECT @i:=0) t WHERE `IsDeleted` = 0
Oracle:
本就有rownum。可直接用:SELECT rownum,字段 FROM 表名
SqlServer:
SELECTROW_NUMBER()OVER(ORDERBYID) ROWNU,字段FROM表名
给表中所有数据重新排序
SELECT(SELECTCOUNT(`Id`)FROM表名 别名1WHERE别名1.`IsDeleted`=0AND别名1.`Id`<=别名2.`Id`)ASseq ,别名2.*FROM表名别名2WHERE别名2.`IsDeleted`=0AND别名2.`WLTId`=3
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)