我正在开发一个系统,以便能够在一小时内预订房间。我有以下表格: 预订 客房 老虎机 天
天桌 包含一年中的所有日子。 (下面只是6月份的快照)
+-----------+------------+--------------------+
| id | date_day | created_at |
+-----------+------------+------------+-------+
| 1 | 2017-06-20 |2017-06-26 22:05:11 |
| 2 | 2017-06-21 |2017-06-26 22:05:12 |
| 3 | 2017-06-22 |2017-06-26 22:05:20 |
| 4 | 2017-06-23 |2017-06-26 22:05:24 |
| 5 | 2017-06-24 |2017-06-26 22:05:28 |
| 6 | 2017-06-25 |2017-06-26 22:05:31 |
| 7 | 2017-06-26 |2017-06-26 22:05:35 |
| 8 | 2017-06-27 |2017-06-26 22:05:40 |
+-----------+------------+------------+-------+
客房表
+-----------+------------+------------+--------------------+
| id | name | status | created_at |
+-----------+------------+------------+--------------------+
| 1 | Room A | 1 |2017-06-26 22:16:21 |
| 2 | Room B | 1 |2017-06-26 22:21:45 |
+-----------+------------+------------+--------------------+
插槽表
+-----------+------------+------------+--------------------+
| id | start_time | end_time | created_at |
+-----------+------------+------------+--------------------+
| 1 | 07:00 AM | 08:00 AM |2017-06-26 20:22:45 |
| 2 | 08:00 AM | 09:00 AM |2017-06-26 20:28:08 |
| 3 | 09:00 AM | 10:00 AM |2017-06-26 20:36:27 |
| 4 | 10:00 AM | 11:00 AM |2017-06-26 20:44:12 |
+-----------+------------+------------+--------------------+
预订表
+-----------+------------+------------+--------+-------------------------+
| id | room_id | slot_id |booked_date | created_at |
+-----------+------------+------------+--------+-------------------------+
|1 | 1 | 1 |7 |2017-06-26 22:16:08 |
|2 | 1 | 2 |7 |2017-06-26 22:18:26 |
|3 | 1 | 3 |7 |2017-06-27 05:17:35 |
|4 | 1 | 4 |7 |2017-06-27 06:43:04 |
|5 | 1 | 1 |7 |2017-06-27 08:22:48 |
+-----------+------------+------------+--------+-------------------------+
我希望在一周的范围内获得某个房间的预订数据,如下所示:
预订房间A的数据:
+-----------+-----------+-----------+-----------+-----------+
|date |07:00-08:00|08:00-09:00|09:00-10:00|10:00-11:00|
+-----------+-----------+-----------+-----------+-----------+
|2017-06-26 | Booked | Booked | Booked | Booked |
|2017-06-27 | Booked |Not Booked |Not Booked |Not Booked |
+-----------+-----------+-----------+-----------+-----------+
使用以下查询,但它没有给我正确的数据:
SELECT tbl_days.id,tbl_days.date_day,
IF(tbl_bookings.slot_id =1,'Booked','Available') AS '07:00 to 08:00',
IF(tbl_bookings.slot_id =2,'Booked','Available') AS '08:00 to 09:00',
IF(tbl_bookings.slot_id =3,'Booked','Available') AS '09:00 to 10:00',
IF(tbl_bookings.slot_id =4,'Booked','Available') AS '10:00 to 11:00',
FROM tbl_days,
LEFT JOIN tbl_bookings ON tbl_bookings.booking_date = tbl_days.id,
LEFT JOIN tbl_slots ON tbl_slots.id = tbl_bookings.slot_id,
LEFT JOIN tbl_fields ON tbl_rooms.id = tbl_bookings.room_id
然而,这并没有给我预期的数据。 我会很高兴知道我做错了什么,并做得对。
答案 0 :(得分:0)
感谢评论部分提出的关于使用MAX(CASE WHEN .. END)
的观点终于得到了它的一个钩子:
SELECT tbl_days.id,tbl_days.date_day,
MAX(CASE WHEN tbl_bookings.slot_id =1 THEN 'Booked' ELSE 'Available' END) '07:00 to 08:00',
MAX(CASE WHEN tbl_bookings.slot_id =2 THEN 'Booked' ELSE 'Available' END) '08:00 to 09:00',
MAX(CASE WHEN tbl_bookings.slot_id =3 THEN 'Booked' ELSE 'Available' END) '09:00 to 10:00',
MAX(CASE WHEN tbl_bookings.slot_id =4 THEN 'Booked' ELSE 'Available' END) '10:00 to 11:00'
FROM tbl_days
LEFT JOIN tbl_bookings
ON tbl_bookings.day_date = tbl_days.id
LEFT JOIN tbl_slots
ON tbl_slots.id = tbl_bookings.slot_id
LEFT JOIN tbl_rooms
ON tbl_rooms.id = tbl_bookings.room_id
GROUP BY tbl_days.id;