请问mysql 中 怎么实现这种排序,按照状态排序正序,再按照开始时间排序正序,

请问mysql 中 怎么实现这种排序,按照状态排序正序,再按照开始时间排序正序,,第1张

有两个思路

1、按照各自的活动状态先排序,插入到临时表,最后再union all所有结果集

create temporary table tmp1

select * 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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7301186.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存