2017-01-13 2 views
-4

Я работаю над проектом бронирования парковки и хочу, чтобы ни одно место не забронировалось в течение определенного периода времени. Я использую следующий синтаксис, но он не работает для меня,Как сравнить mysql два поля datetime с двумя входными данными datetime, чтобы избежать чрезмерного резервирования

SELECT * FROM reservation WHERE 
`spot_id`='$id' AND 
`Location`='$location' AND 
(`in` >= '$datein' OR `out` <= '$dateout') AND 
(`in` < '$datein' OR `out` > '$dateout') 

Просьба сообщить мне.

я получил правильный синтаксис выглядит следующим образом:

SELECT * FROM reservation WHERE spot_id='$id' AND Location='$location' AND (`in` between '$datein' AND '$dateout' OR `out` between '$datein' AND '$dateout' OR `in` <= '$datein' AND `out` >= '$dateout') 
+1

Приветствуем вас на StackOverflow. Для получения дополнительных вопросов вам может быть полезно узнать об этой странице: http://stackoverflow.com/editing-help Чтобы получить помощь, необходимо, чтобы ваши вопросы содержали все необходимые детали, но формирование также имеет решающее значение, поскольку люди, которые могут знать ответ, могут не прочитать ваш вопрос, если форматирование испорчено. Удачи! – derM

+0

Между прочим, событие A перекрывает событие B, если событие A начинается до того, как событие B закончится и закончится после запуска события B. – Strawberry

ответ

0

Во-первых, ваша логика ошибочна.

После или равна дате $dateinили до или равна дате $dateout означает любую дату, когда-либо.

(`in` >= '$datein' OR `out` <= '$dateout') 

А до $datein или после $dateout просто путает его дальше.

(`in` < '$datein' OR `out` > '$dateout') 

Несмотря на это, то, что вы хотите сделать, не будет работать так, как вы в настоящее время пытаетесь это сделать. Что, если место было забронировано на месяц, и вы хотите проверить среднюю неделю?

Необходимо нормализовать свои данные. Например. Запись в таблице для каждого отдельного дня, забронированного для каждого места, и соответственно запрашивать эту таблицу.

Смежные вопросы