关于 Mysql 里面日期相关的非递增递减的排序

2015-03-18 15:27:46 +08:00
 StevenTong
有活动两个字段 startDate 和 endDate 类型是TIMESTAMP

要跟 CURRENT_TIME 比较

顺序是 活动进行中>未开始>已结束


select * from actions where ?????? order by ??????
3894 次点击
所在节点    MySQL
13 条回复
jhdxr
2015-03-18 15:40:56 +08:00
select *, if(time() >= startData and time() <= endData, 1, if(time() < startData, 2, 3)) as o from actions where ?????? order by o

我觉得你这样子想要一条sql写完性能会死的很惨
StevenTong
2015-03-18 15:51:26 +08:00
select actions.*,
if(current_timestamp > actions.startDate and current_timestamp < actions.endDate,1,0) as status,
if(current_timestamp < actions.startDate,2,0) as status,
if(current_timestamp > actions.endDate,3,0) as status
from actions, actions_members
where actions_members.m_id = 3 and actions_members.status = "ok" and actions.id = actions_members.t_id
order by status asc;


可是3条if怎么写到一起呢?
StevenTong
2015-03-18 15:52:11 +08:00
原来是1L这样写
StevenTong
2015-03-18 15:54:11 +08:00
@jhdxr 怎么优化好?
aqqwiyth
2015-03-18 16:04:21 +08:00
变相的分组排序,你是不是还有一个隐性的需求没提出来

union all 我觉得比较适合

selct 活动进行中
union all
selct 未开始
union all
selct 已结束
aqqwiyth
2015-03-18 16:04:39 +08:00
这样可以对 活动进行中 / 结束 的进行排序
jlnsqt
2015-03-18 16:24:58 +08:00
能否修改表结构?若可以增加一个活动的状态字段会更好。不可以就用UNION ALL
StevenTong
2015-03-19 09:15:42 +08:00
@jlnsqt 表结构可以随意更改

状态字段可以根据时间自己更新吗?
jhdxr
2015-03-19 13:06:18 +08:00
@aqqwiyth union all的问题在于如果还想用limit n,m的话不大好做吧?
jhdxr
2015-03-19 14:04:32 +08:00
@StevenTong 得看你的需求,你是做类似于排行榜那样子确定只有一页的么?
StevenTong
2015-03-19 15:50:22 +08:00
@jhdxr 用户可以创建一项团队活动 其他用户可以加入
我创建的 或者我加入的 所有的活动
在APP中 比如有我的活动这一项需要显示所有的与我有关联的 得按照进行中 未开始 已过期排序

就是这样的需求
jhdxr
2015-03-19 22:32:51 +08:00
@StevenTong 我个人建议你可以拆成3个独立的sql,先只查进行中的,不够再去查未开始的,最后去查过期的。这样子就是翻页是个问题。。。但因为你这业务对时间要求不强(不像拍卖之类的),所以在应用层面去做这个页码的计算应该也ok
jlnsqt
2015-03-23 15:37:25 +08:00
@StevenTong 不好意思,好几天没上了,可以啊,可以用MySQL本身的定时器,也可以用程序去实现,每隔1秒执行一次修改,如果每秒的任务数量不多的话,这种方式还是可行的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX