查找数据库中是否已存在的时间

时间:2012-03-02 09:48:27

标签: php mysql

我有mysql查询来检查数据库中存在的任何特定预留。这些条件适用于患者医生预约系统

背景: 我有系统检查可用的时间段。并显示下一个可用时间。根据系统,我的下一个可用时间是上午9:15到10:45 AM。但是在管理员方面我已经预订了上午10:00到10:30,这是由管理员设置的。所以我需要向用户显示一条消息“在请求的时间9:15到10:45之间有预订。你不能使用整个时间。”

我写了一个查询,但它不起作用,它没有给出任何结果

SELECT * 
FROM reservation
WHERE facility_id =  '24'
AND (
'2012-03-02 09:15:00' >= CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) 
AND  '2012-03-02 09:15:00' <= CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' )
)
AND  '2012-03-02 10:45:00' >= ( CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) 
AND  '2012-03-02 10:45:00' <= CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) ) 

任何人都可以告诉我查询的任何问题。

2 个答案:

答案 0 :(得分:0)

尝试将字段转换为日期时间字段..像这样:

CAST('2012-03-02 09:15:00' AS DATETIME)

在您的示例中,您的位置将如下所示:

AND (
CAST('2012-03-02 09:15:00' AS DATETIME) >= CAST(CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) AS DATETIME)
AND  CAST('2012-03-02 09:15:00' AS DATETIME) <= CAST(CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) AS DATETIME)
)
AND  CAST('2012-03-02 10:45:00' AS DATETIME) >= ( CAST(CONCAT( reservation_date,  ' ', reservation_time,  ':00' )  AS DATETIME)
AND  CAST('2012-03-02 10:45:00' AS DATETIME) <= CAST(CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) AS DATETIME) )

答案 1 :(得分:0)

因为你在比较字符串而不是日期时间值,所以它不应该工作。像这样使用Date_FORMAT()

SELECT * 
FROM reservation
WHERE facility_id =  '24'
AND (
 DATE_FORMAT('2012-03-02 09:15:00' , "%Y-%m-%d %H:%i:%s") 
 >= 
 DATE_FORMAT(CONCAT( reservation_date,  ' ', reservation_time,  ':00' ), "%Y-%m-%d %H:%i:%s") 
AND  
...

BTW:这是一个糟糕的设计,如果reservation_datedatetime会更容易,那么您可以使用{{1}直接比较这两个值或没有所有这些铸造。