Проверка доступности резервирования ресурсов

у меня есть следующая таблица:

id | rsvp_date | return_date | user_id | car_id

где ID — это PK, rsvp_date & return_date is DATETIME, user_id & car_id — это FK для таблицы пользователей и таблицы машин соответственно.

Что я хочу сделать, это проверять каждый раз, когда пользователь хотел бы сделать заказ. Запрос, который проверяет, что сводится к этому (этот запрос вызывается функцией checkAvailability ():

SELECT id
FROM `car_reservation`
WHERE ('2014-10-06 07:00:00' BETWEEN rsvp_date AND return_date)
AND car_id = 5;

Функция, которую я упомянул:

function checkAvailability($datetime, $id = null){
$sql = "SELECT id
FROM `car_reservation`
WHERE ('".$datetime."' BETWEEN rsvp_date AND return_date)
AND car_id = ".$id;

$query = $this->db->query($sql);
// echo "<pre>"; print_r($this->db->last_query());die();
if($query->num_rows() > 0){
return FALSE;
}else{
return TRUE;
}
}

Где указанная дата будет сопоставлена ​​со столбцами rsvp_date и return_date. А дата берется из поля формы (есть 2 поля; Дата начала и Дата возврата).

Текущий код не работает так, как я хочу. Например:

  • Гость № 1: Резервный автомобиль A между 2014-10-06 07:00:00 до 2014-10-06
    10:00:00 [Действительный]
  • Гость № 2: Резервный автомобиль B между 2014-10-06 07:00:00
    До 2014-10-06 10:00:00 [Действителен]
  • Гость № 3: резервный автомобиль между
    2014-10-06 08:00:00 до 2014-10-06 11:30:00 [Недоступно, из-за запуска
    время не доступно]
  • Гость № 4: зарезервированный автомобиль B между 2014-10-06 06:00:00 до 2014-10-06
    14:00:00 [Действительно, но это не так. Поскольку гость № 2 уже
    забронировал машину с 07:00:00 до 10:00:00].

Может ли кто-нибудь помочь мне с тем, как мне улучшить свой код, чтобы последнее условие вернулось «Ложь», если между запрошенным бронированием уже сделано бронирование?

PS: я нашел эту статью, но с трудом понимая ее, я ищу подобный подход только проще. http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET

РЕДАКТИРОВАТЬ:

Эта картина визуализирует все, я думаю, теперь мне просто нужно реализовать функцию, указанную в заголовке каждого столбца (те, у кого есть галочка).

введите описание изображения здесь

2

Решение

Согласно этому ТАК вопрос Вы должны проверить разные:

$query = "SELECT id
FROM `car_reservation`
WHERE (
'".$datetimeStart."' <= return_date
AND
'".$datetimeEnd."' >= rsvp_date
) AND car_id = ".$id
";

Смотрите SQL скрипку: http://sqlfiddle.com/#!2/d818c/1

куда $datetimeStart является 2014-10-06 06:00:00 а также $datetimeEnd является 2014-10-06 14:00:00 по вашему Guest #4 сценарий теста.

И помните о SQL-инъекциях, если вы объединяете SQL-запрос с переменными, которые могут содержать пользовательский ввод.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]