我有这个带有以下记录的 mysql 表。
表名:gce_arena_surface_booking
+----+---------------------+---------------------+------------------+
| id | start_datetime | end_datetime | arena_surface_id |
+----+---------------------+---------------------+------------------+
| 1 | 2012-11-22 02:30:00 | 2012-11-22 05:00:00 | 2 |
| 2 | 2012-11-22 00:00:00 | 2012-11-22 02:30:00 | 2 |
| 3 | 2012-11-22 05:00:00 | 2012-11-22 08:00:00 | 2 |
| 4 | 2012-11-22 08:00:00 | 2012-11-22 11:00:00 | 2 |
| 5 | 2012-11-22 11:00:00 | 2012-11-22 17:00:00 | 2 |
| 6 | 2012-11-22 17:30:00 | 2012-11-22 22:00:00 | 2 |
| 7 | 2012-11-23 02:00:00 | 2012-11-23 18:00:00 | 2 |
+----+---------------------+---------------------+------------------+
我需要知道给定的日期时间,如果已经存在任何预订,我正在使用此查询来检查给定的任何预订是否存在start_datetime
,并且end_datetime
SELECT
id, start_datetime, end_datetime, arena_surface_id
FROM
gce_arena_surface_booking
WHERE (
(start_datetime BETWEEN '2012-11-23 2:00' AND '2012-11-23 6:00') OR
(end_datetime BETWEEN '2012-11-23 2:00' AND '2012-11-23 6:00')
)
AND arena_surface_id = 2
上面的查询给我带来了问题,例如,如果我的值从:
'2012-11-23 2:00' AND '2012-11-23 6:00'
至
'2012-11-23 2:30' AND '2012-11-23 6:00'
请注意,我已将值从 更改2:00
为2:30
,如果我这样做,它不会返回任何结果,而参考上面的记录,我希望它返回带有 id 的行,7
因为我在2:00
and 和之间预订了时间段18:00
,因此任何与时间相匹配的给定值02:00
都18:00
应该返回一行。
处理我的问题的正确 mysql 查询是什么?
如果您想使用记录和模式,这里是sqlfiddle的链接。