我一直在搜索和试验这个2天,但我无法正常工作,我真的希望得到一些帮助。
舱
cabin_id
name
active
start_day (enum 'Saturday' or 'Sunday')
预订
booking_id
cabin_id
check_in (date)
check_out (date)
confirmed
到目前为止很简单。我应该注意到,机舱租金仅在1周内开始,而周或者从周六或周日开始。
我需要返回两个日期之间 ANY 可用性的所有'小屋',而不是像两个日期之间那样 ARE ,就像大多数预订系统的答案一样在这里见过。
到目前为止我的尝试:
SELECT c.cabin_id, c.name
FROM cabin c
WHERE (c.cabin_id NOT IN (
SELECT b.cabin_id
FROM bookings b
WHERE (b.check_out >= '$date_from' && b.check_in <= '$date_to') OR
(b.check_out <= '$date_from' && b.check_in >= '$date_to')
)
)
ORDER BY `c`.`order` ASC
这只显示两个日期之间没有预订的小木屋。
例如,我在2014年1月26日至2014年3月2日期间添加了预订,此查询不会显示1月,2月或3月的客舱,应在1月和3月显示为它在那几个月仍有一些可用性。
我现在已经在一个循环中工作,似乎无法理解这一点。
修改 SQL摆弄表格和数据:http://sqlfiddle.com/#!2/e3c8f/3