我正在開發預訂系統,並在我的預訂表單中有一個正在返回(仍然)預訂系統的可用開始時間段的下拉元素。帶聯盟查詢的下拉列表
通過創建一個新的預訂,我創建的查詢工作正常,所有可用的開始時間槽都能正確返回。
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
下拉應從以下幾個選項來填充:
14:00 18:00 18:30 19:00 19:30
我試圖創建一個聯合查詢來獲取客戶選擇的開始時間段和(仍然)可用的開始時間段。
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_taken與已經存在的預訂預訂25 11 2016 ID = 347
fab_booking Please download the sql table
ID 347有關預訂
fab_booking_slots表,其中包含所有可能的時隙
fab_heuredepart_resa表,填充下拉元素
該查詢非常複雜。如果您爲查詢中引用的每個表發佈了一些示例數據,那肯定會有所幫助。 – mendosi
謝謝mendosi,可以下載數據庫表。 – marcq
我並不完全瞭解您的業務規則,但如果預訂時間是從14:00到17:30,他們想要改變時間,爲什麼只在14:00,18:00,18:30和19:00提供: 00和19:30?爲什麼不在14:30,15:00,15:30,16:00,16:30,17:00和17:30? – mendosi