【发布时间】:2015-08-21 14:08:20
【问题描述】:
我正在创建一个预订系统,它有 2 张桌子
房间
id | name | no_of_rooms
1 | Lake View | 4
2 | Royale | 2
3 | Sky View | 6
预订
id |room_id | start | end | total_rooms
4 |1 | 2015-08-13 | 2015-08-14 | 2
5 |2 | 2015-08-20 | 2015-08-22 | 1
6 |2 | 2015-08-01 | 2015-08-13 | 1
在搜索页面上创建新预订时,我想查找此日期范围内的可用房间
搜索值 开始时间:2015-08-11 结束 : 2015-08-12
预期结果
id | name | no_of_rooms | available_rooms
1 | Lake View | 4 | 4
2 | Royale | 2 | 1
3 | Sky View | 6 | 6
我得到的结果
id | name | no_of_rooms | available_rooms
1 | Lake View | 4 | 0
2 | Royale | 2 | 1
3 | Skyview | 6 | 0
这是我为房间可用性编写的代码
SELECT
r.id,
r.name,
r.no_of_rooms,
IFNULL(sum(b.total_rooms),0) as available_rooms
FROM rooms r
LEFT JOIN bookings b ON r.id = b.room_id AND
(
(b.start <= "2015-08-11" AND b.end >= "2015-08-11")
OR
(b.start <= "2015-08-12" AND b.end >= "2015-08-12")
)
GROUP BY r.id
我也不希望显示不可用的房间。无论我尝试什么结果都是完全错误的。希望你们能帮助我!
【问题讨论】:
标签: mysql sql group-by left-join