mysql - sql语句 按照比赛的状态排序

查看:192
本文介绍了mysql - sql语句 按照比赛的状态排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

比如我有一个比赛表,里面存储着好多个比赛,每个比赛都有开始时间和结束时间。我的sql语句怎么写,能按照比赛的状态进行中, 即将开始, 已结束,这三个状态先后展示呢?

如果涉及到分页该怎么实现呢?

谢谢各位大拿!!

我看网上有的人说用一个新字段status来表示比赛的状态,比如进行中是2,即将开始是1,已结束是0,然后对status排序。可是这样的话,我每次都得先获取当前时间,然后对比所有比赛的开始时间和结束时间,再把需要的状态都更新一次。然后才能按照status排序。

解决方案

比如有上面的表,林丹的已经结束,李宗伟的正在进行,谌龙的还没有开始,

可以写下面的语句:

使用了MySQL的 if 判断,当然如果更复杂也可以使用case语句

select if (now() between start_time and end_time, 2, if ( now()>end_time, 1,3)) as zt FROM `match`.badminton order by zt desc limit 0,10;

zt表示状态,1表示结束,2表示正在进行,3表示还没有开始。

这条SQL语句的逻辑是:

如果当前时间介于开始和结束之间,那就是进行中[2]

否则再次判断,如果当前时间大于结束时间,那就是已经结束[1]

再否则,就是剩下的那种情形还没有开始[3]

分页直接使用limit就可以了。

这篇关于mysql - sql语句 按照比赛的状态排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆