2013-10-24 2 views
0

Я хочу проверить конфликт даты и времени с помощью mysql и php.Проверьте наличие конфликта времени в mysql с помощью php

Моя временная метка отформатированный с помощью PHP кода, такие как:

$timestamp_start = date("Y-m-d H:i:s", mktime(date("H", strtotime($start_time)), date("i", strtotime($start_time)), 0, $date[0], $date[1], $date[2])); 
$timestamp_end = date("Y-m-d H:i:s", mktime(date("H", strtotime($end_time)), date("i", strtotime($end_time)), 0, $date[0], $date[1], $date[2])); 

И я MySQL проверить, как это показано ниже:

$sql = "SELECT * FROM `$info[table]` WHERE ((`timestamp_start` BETWEEN '$timestamp_start' AND '$timestamp_end') OR (`timestamp_end` BETWEEN '$timestamp_start' AND '$timestamp_end'))"; 

Какой код я здесь! ха-ха.

Теперь проблема заключается в том, что если номер запланирован на 10/31/2013 с 08:00 до 17:00, а кто-то другой планирует запланировать его за 10/31/2013 с 17:00 до 09 : 00 PM они получают сообщение о том, что комната уже используется. Теперь я не возражал против этого сначала, потому что он заставил комнату иметь по крайней мере 30-минутный промежуток между событиями, но мои боссы сказали, что комната должна быть спланирована спиной к спине.

Как я могу изменить свою инструкцию sql, чтобы позволить кому-либо запросить комнату в 17:00, если она забронирована до 17:00?

Это похоже на работу

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')"; 
+1

вместо того, чтобы использовать между ними, вы можете использовать < and > – Sebas

+0

Почему вы не просто форматируете дату в запросе? – Kermit

+0

У меня нет ответа для этого ... Я просто сделал это на PHP. –

ответ

1

BETWEEN является содержащей операцией, например,

foo BETWEEN bar AND baz 

является эквивалентом

(foo >= bar) AND (foo <= baz) 

Так как вы хотите, чтобы «перекрытие» на время обрезания, вам придется угробить `между операцией, и идти на более утомительным к -Write выход

(foo >= bar) AND (foo < baz) 
         ^--- non-inclusive 
+0

Итак, я скорректировал свой '$ sql', чтобы выглядеть как' $ sql = "SELECT * FROM info [table] WHERE ((timestamp_start> = '$ timestamp_start' AND timestamp_start <'$ timestamp_end') ИЛИ (timestamp_end> '$ timestamp_start' AND timestamp_end <= '$ timestamp_end')) ";, но я получаю сообщение об ошибке' неожиданный <' –

+0

является неожиданным, или mysql неожиданным? –

+0

Я не уверен, но фактическая ошибка возникает, когда я пытаюсь освободить запрос mysqli. 'Вызов функции-члена free() для не-объекта в URL-REMOVED в строке
: SyntaxError: Неожиданный токен <' –

0

Нашел на другой вопрос, задаваемый здесь:

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')"; 

И, похоже, он работает с ограниченным тестированием.

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