检查两个DATETIME列之间是否存在条目时出现问题。 创建按摩预约系统,我列出时间08:00,08:15 08:30,08:45,等等。 我想检查是否有一个插槽,例如从13:00:00到2小时前进。 (这种治疗是120分钟,其他治疗持续90分钟等)。
表格就像这样
|id|event|from_date|to_date|
1 | massage | 2011-08-15 14:00:00 | 2011-08-15 16:00:00
查询
$times_from_date = '2011-08-15 13:00:00';
$times_to_date = '2011-08-15 16:00:00';
SELECT * FROM `wp_byforssell_booking` WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date
它很有效。有什么想法吗?
修改
假设我在上面的数据库中得到了约会。
我想查询2011-08-15 13:45和2011-08-15 15:30之间的所有约会。
这是我的问题。希望这是对问题的更好解释。
修改
我的表现在看起来像这样
id|event|from_date|to_date|
1 | massage(60min) | 2011-08-15 13:30:00 | 2011-08-15 15:30:00
2 | massage(60min) | 2011-08-15 09:00:00 | 2011-08-15 10:00:00
我的查询: 从09:30和11:30选择时间,它不会产生第2行。
SELECT * FROM wp_byforssell_booking WHERE((('2011-08-15 09:30:00' <= from_date)AND('2011-08-15 11:30:00' > from_date)) OR (('2011-08-15 09:30:00' >= from_date)AND('2011-08-15 11:30:00' < to_date)))
答案 0 :(得分:0)
你有一个错字。您声明了$times_to_date
,但您的查询使用了$from_to_date
。
...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date
---------------------------------------------------------------------------------------------^^^^^^^^^^^^^^
应该是:
...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_to_date
答案 1 :(得分:0)
除了迈克尔所指出的,你还要做两次相同的WHERE子句:
... WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date ...
其中一个人不应该检查$times_to_date
吗?
答案 2 :(得分:0)
如果我理解正确,你想要列出开始时间和结束时间之间有足够时间差的所有桶(在这种情况下是$ times_from_date和$ times_to_date),这样就可以了,我想:
SELECT * FROM wp_byforssell_booking
WHERE exists
(select 1 from wp_byforssell_booking where
timestampdiff(HOURS,from_date,to_date)>=
timestapdiff(HOURS,$times_from_date,$times_to_date)
答案 3 :(得分:0)
要获取与$times_from_date
和$times_to_date
给出的日期时间范围重叠的记录,请使用
SELECT * FROM wp_byforssell_booking WHERE
(
(($times_from_date <= from_date)AND($times_to_date > from_date))
OR
(($times_from_date >= from_date)AND($times_from_date < to_date))
)
您可能必须使用<
而不是<=
而>
而不是>=
- 这取决于您的逻辑,即如果一个结束于{,则两个事件重叠{1}}和其他内容从2011-08-15 14:00:00
开始(IOW需要启动2011-08-15 14:00:00
以便不重叠)。