2015-01-17 2 views
0

У меня есть следующие строки в таблице:Проверьте дату между двумя другими

id booking start    end 
3  325 2015-01-01 00:00:00 2015-01-09 00:00:00 

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

SELECT * FROM $table WHERE booking=$product AND $from between start and end 

При анализе анализируется следующее:

SELECT * FROM wp_ovalbit_utils WHERE booking=325 AND 2015-02-01 between start and end 

Очевидно, что это должно возвращать эту строку, однако это не так.

Это моя схема:

id mediumint(9) NOT NULL AUTO_INCREMENT, 
booking text NOT NULL, 
start datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
end datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
UNIQUE KEY id (id) 
+0

Вы пропустили эти (') – Strawberry

+0

Ах да, и 02-01 является 1 февраля – Strawberry

ответ

2

Вы забыли кавычки вокруг даты и избежать зарезервированные слова, как end

SELECT * 
FROM wp_ovalbit_utils 
WHERE booking = 325 
AND '2015-02-01 00:00:00' between `start` and `end` 

BTW 1 за февраль не между двумя например датами.

+0

Формат даты - yyyy-dd-mm, так что это второй из января –

+0

. Формат по умолчанию - 'yyyy-mm-dd'. –

+0

Вау, я идиот. Поскольку люди вводили его в dd/mm/yyyy, я предположил, что дата сохранит правильный порядок. Это было частью того, что было не так. –

0

Вы должны иметь возможность использовать следующее предложение WHERE.

WHERE `start` < $from AND $from < `end`; 

Я не могу сказать точно, если столбцы могут быть использованы в BETWEEN заявления (по крайней мере, я никогда не использовал между этим способом вокруг).

PS. Имейте в виду SQL-инъекцию, которая может быть возможна с использованием переменных напрямую. См http://wiki.hashphp.org/Validation

0
SELECT * FROM wp_ovalbit_utils 
WHERE booking=325 
AND `start` < '2015-02-01 00:00:00' AND `end` > '2015-02-01 00:00:00' 

так, в основном ваша дата должна быть больше даты начала и меньше, чем на дату окончания

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