Mysql查询逻辑(课程之前,之后和之间)

问题描述 投票:1回答:1

我有一个包含许多专栏的课程,但这个问题只需要其中三个:

----------------------------------------
| start_date | start_time  | end_time  |
----------------------------------------
| 2018-09-12 | 09:30       | 11:30     |
----------------------------------------

我需要一个包含以下标准的课程的查询:

  • 课程开始于30分钟前或将在接下来的30分钟内开始。
  • 课程以30分钟结束或在接下来的30分钟内结束。
  • 目前正在进行的课程

前两个我设法编写查询,但现在请求第三个标准。到目前为止我有这个查询(伪mysql查询)

SELECT * 
FROM courses 
WHERE start_date = today AND 
    ((start_time >= now-30min AND start_time <= now+30min) OR 
     (end_time >= now-30min AND end_time <= now+30min))

问题是,如何编写一个查询来满足所有这三个要求...我正在大脑一小时但我无法使它工作,有些东西在我脑海里不起作用。

谢谢。

php mysql sql
1个回答
3
投票

假设课程没有超过午夜边界:

select c.*
from courses c
where start_date = curdate() and
      (start_time between curtime() - interval 30 minute and curtime() - interval 30 minute or
       end_time between curtime() - interval 30 minute and curtime() - interval 30 minute or
       ( start_time < curtime() and end_time > curtime() )
      )

最后一个条件就是课程从过去开始,将在未来结束。

© www.soinside.com 2019 - 2024. All rights reserved.