2011-08-05 102 views
0

有问题检查两个DATETIME列之间是否存在条目。 创建按摩预约系统,我列出时间08:00,08:15 08:30,08:45等。 我想检查是否有一个插槽,例如从13:00:00和两个小时向前。 (这种治疗120分钟,其他治疗90分钟等)。日期和时间之间的MySQL检查2列队

表是这样的

|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 

它dosent工作。有任何想法吗?

编辑

可以说,我有我的数据库中被任命为以上。

我想查询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

在你的例子中,你正在检查**三个**小时插槽,而不是**两个** - '13:00'直到'16:00'是三个小时。 – ain

回答

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 
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

+0

是的,我看到了,但那只是一个错字:) –

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) 
+0

非常感谢您的回复,我想我需要重新开始。检查我的帖子中的编辑 –

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)) 
) 

您可能需要使用<而不是<=>而不是>= - 这取决于您的逻辑,即如果两个事件结尾在2011-08-15 14:00:00和其他开始于2011-08-15 14:00:00(为了不重叠,需要开始2011-08-15 14:00:01),两个事件重叠。