Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql查询逻辑(课程之前、之后和之间)_Php_Mysql_Sql - Fatal编程技术网

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

Php Mysql查询逻辑(课程之前、之后和之间),php,mysql,sql,Php,Mysql,Sql,我的课程有很多专栏,但这个问题只需要三个专栏: ---------------------------------------- | start_date | start_time | end_time | ---------------------------------------- | 2018-09-12 | 09:30 | 11:30 | ---------------------------------------- 我需要一个包含符合以下条件的课程的查询:

我的课程有很多专栏,但这个问题只需要三个专栏:

----------------------------------------
| start_date | start_time  | end_time  |
----------------------------------------
| 2018-09-12 | 09:30       | 11:30     |
----------------------------------------
我需要一个包含符合以下条件的课程的查询:

  • 30分钟前开始或将在未来30分钟开始的课程
  • 课程在30分钟内结束或在接下来的30分钟内结束
  • 目前正在进行的课程
我设法为前两个条件编写了查询,但现在请求了第三个条件。到目前为止,我有这个查询(伪mysql查询)

选择*
从球场
其中开始日期=今天和

((开始时间>=now-30min,开始时间=now-30min,结束时间假设课程不超过午夜界限:

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() )
      )
选择c*
来自课程c
其中start_date=curdate()和
(curtime()-间隔30分钟和curtime()-间隔30分钟之间的开始时间或
curtime()-间隔30分钟和curtime()之间的结束时间-间隔30分钟或
(开始时间curtime())
)

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

难道不能简化为只测试开始时间在现在之前,结束时间在现在之后吗?@Sloan Thrasher:不。谢谢,这似乎是正确的方式!在罗马尼亚编程太晚了:)将日期和时间存储为单个实体
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() )
      )