Я разрабатываю систему бронирования, и в моей форме бронирования у меня есть выпадающий элемент, который возвращает (все еще) доступные начальные временные интервалы для системы бронирования.Выпадающий список с запросом на соединение
Создав новое бронирование, запрос, который я создал, работает нормально, и все доступные начальные временные интервалы возвращаются правильно.
QUERY:
WHERE {thistable}.id
IN (
SELECT id +3
FROM (
SELECT p1.book_date, t.*, count(p1.book_date) AS nbre
FROM fab_booking_taken AS p1
CROSS JOIN fab_booking_slots AS t
WHERE NOT ((t.heuredepart_resa < p1.book_end AND
t.heurearrivee_resa > p1.book_start))
AND DATE(p1.book_date)=DATE('{fab_booking___book_bookingdate}')
GROUP BY t.id) AS x
WHERE nbre =
(
SELECT count(p2.book_date)
FROM fab_booking_taken AS p2
WHERE p2.book_date = x.book_date
)
) ORDER BY id ASC
Смотрите видео: booking creationg
У меня есть проблема с использованием того же запроса путем редактирования существующего бронирования доступного времени начала слота возвращаются и это хорошо:
18:00 18:30 19:00 19:30
, но не уже выбранным клиентом (и в базе данных сохранен) временной интервал, который находится в моем примере 14:00.
Смотрите видео: Editing booking with same query
Dropdown должны быть заполнены следующие варианты:
14:00 18:00 18:30 19:00 19:30
I попытался создать запрос объединения, чтобы получить уже выбранный клиентом временной интервал времени и доступные (по-прежнему) доступные временные интервалы времени.
QUERY:
{thistable}.id
IN (
SELECT id + 3
FROM (
SELECT p1.book_date, t.*, count(p1.book_date) AS nbre
FROM fab_booking_taken AS p1
CROSS JOIN fab_booking_slots AS t
WHERE NOT ((t.heuredepart_resa < p1.book_end
AND t.heurearrivee_resa > p1.book_start))
AND p1.book_date = DATE_FORMAT('{fab_booking___book_bookingdate}', '%Y-%m-%d')
GROUP BY t.id
) as foobar2
UNION (
SELECT id + 3
FROM (
SELECT p1.book_date, t.*, count(p1.book_date) AS nbre
FROM fab_booking_taken AS p1
CROSS JOIN fab_booking_slots AS t
WHERE ((t.heuredepart_resa < p1.book_end
AND t.heurearrivee_resa > p1.book_start))
AND t.id = '{fab_booking___book_starttime}'
AND p1.book_date = DATE_FORMAT('{fab_booking___book_bookingdate}', '%Y-%m-%d')
GROUP BY t.id
) AS x
WHERE nbre = (
SELECT count(p2.book_date)
FROM fab_booking_taken AS p2
WHERE p2.book_date = x.book_date
)
)
)
Уже от клиента выбрано время начала слота возвращается (14:00), но другие доступные возвращаемое время запуска слоты не являются правильными.
Смотрите видео: Editing booking with union query
Я застрял, и я понятия не имею, как я мог бы решить эту проблему, так что я был бы признателен за помощь здесь.
Благодаря
Соответствующие таблицы базы данных
fab_booking с бронированием заинтересованного в видео
fab_booking_taken с уже существующими бронирований 25 11 2016 ID = 347
ID 347 заинтересованный бронирование
fab_booking_slots таблицу, которая содержит все возможные временные интервалы
fab_heuredepart_resa таблица, которая заполнения выпадающего списка элемент
Этот запрос довольно сложный. Это наверняка поможет, если вы разместите несколько выборочных данных для каждой из таблиц, на которые ссылаются ваши запросы. – mendosi
Спасибо, mendosi, таблицы базы данных можно загрузить. – marcq
Я не совсем понимаю ваши бизнес-правила, но если бронирование было с 14:00 до 17:30, и они хотели изменить время, почему только предлагают их 14:00, 18:00, 18:30, 19: 00 и 19:30? Почему бы и не 14:30, 15:00, 15:30, 16:00, 16:30, 17:00 и 17:30? – mendosi