Php 如何查找开始时间和结束时间范围如果在范围内找到,请检查开始日期和结束日期

Php 如何查找开始时间和结束时间范围如果在范围内找到,请检查开始日期和结束日期,php,mysql,codeigniter-3,Php,Mysql,Codeigniter 3,我在数据库中有一个下表 id | list_id |venue_id |name | start_date | end_date |start_time | end_time 1 | 1 | 1 |asdf | 2019-02-02| 2019-02-28 |05:30 |10:00 2 | 7 | 2 |awed | 2019-02-10| 2019-02-20 |07:30 |14:00

我在数据库中有一个下表

    id | list_id |venue_id |name | start_date | end_date   |start_time | end_time 
    1  |       1 |  1      |asdf |  2019-02-02| 2019-02-28 |05:30      |10:00
    2  |       7 |  2      |awed |  2019-02-10| 2019-02-20 |07:30      |14:00
    3  |       7 |  1      |mjgd |  2019-02-04| 2019-02-13 |09:30      |18:00
现在,我必须在
2019-02-04
2019-03-01
范围内找到
场馆id=1的开始日期和结束日期。所以我使用下面的查询

SELECT * FROM `batch_list` WHERE `venue_id` = 1 and ((start_date between '2019-02-04' and '2019-03-01') OR (end_date between '2019-02-04' and '2019-03-01'))
现在我必须找到场馆的日期和时间_id=1,范围为
2019-02-04
2019-03-01
05:00
18:00
。所以我试着在下面提问

SELECT * FROM `batch_list` WHERE `venue_id` = 1 and ((start_date between '2019-02-04' and '2019-03-01') OR (end_date between '2019-02-04' and '2019-03-01')) and((start_time <= `end_time`) and (`start_time` between '05:00' and '18:00')and (end_time between '05:00' and '18:00'))

正如一些人所建议的,最好将日期和时间合并到数据库中

对于您的问题,我认为您需要的查询是:

SELECT * FROM batch_list 
WHERE    venue_id = 1
         AND (start_date <= '2019-03-01') 
         AND (start_time <= '13:00:00')
         AND (end_date >= '2019-02-04')
         AND (end_time >= '10:00:00')
从批次列表中选择*
其中,地点_id=1
和(开始日期='10:00:00')

10:00到01:00=
介于10和24之间或0和1之间
?哦!我想念这个。等等,我正在更新问题。那是10点到13点。更新的问题。你可以通过将日期和时间存储为一个单一实体来拯救自己一个痛苦的世界。我不明白-你真的想找到两个时间间隔的重叠吗?@splash58,表中已经有记录了。如果管理员希望再次创建场馆id=1记录,则首先会检查记录中的开始时间和结束时间是否可用。如果记录可用,则会检查日期记录以获取答案。给我一些时间检查更新的答案,再试一次,如果仍然不起作用,请告诉我再试一次。2019-03-01是结束日期,13:00:00是结束时间。。。对吗?没错,它会检查2019-02-04 10:00和2019-01-03 13:00之间是否有预订
SELECT * FROM batch_list 
WHERE    venue_id = 1
         AND (start_date <= '2019-03-01') 
         AND (start_time <= '13:00:00')
         AND (end_date >= '2019-02-04')
         AND (end_time >= '10:00:00')