2012-03-02 3 views
-1

У меня был запрос mysql, чтобы проверить любые конкретные оговорки, существующие в базе данных. Эти условия работают в докторе пациента системы бронированияНайдите время, если оно уже существует в databse

фона: У меня есть система, которая проверяет доступные временные интервалов й отображают следующие свободное время. В соответствии с системой мое следующее доступное время: с 9:15 до 10:45. Но там, в административной части, я установил резервирование с 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')) 

Любой человек может сказать мне какие-либо проблемы с моим запросом.

+0

дата должна обрабатываться как даты: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html – mindandmedia

+0

См. [Функции сравнения строк] (http: // dev .mysql.com/DOC/RefMan/5.0/ен/строка-сравнения-functions.html) – hakre

ответ

0

Он не должен работать becouse вы сравнивая значения строк, а не значений даты и времени. использовать, например, 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 
... 

КСТАТИ: Это плохой дизайн, это было бы проще, если бы reservation_date является datetime, то вы можете напрямую сравнить два значения с помощью BETWEEN или без всех этих литья ,

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