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

小蚊酱
  • 4.8k

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

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

谢谢各位大拿!!

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

回复
阅读 3.6k
2 个回答

图片描述

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

可以写下面的语句:

使用了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就可以了。

根据你网上看的,你可以写一个定时脚本,每X秒/分钟跑一次,更新数据。
然后sql类似如下

select * from table_name where status = 比赛中;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏