我目前有一个记录工作预订的数据库表 并且有8个时隙可用
+-----------+
|tbl_booking|
+-----------+
|room_id |
|date |
|timeslot |
|booking |
+-----------+
sample data
+-----------+----------+-----------+
|room_id | date | timeslot |
+-----------+----------+-----------+
|1 |2018-01-01| 1 |
|1 |2018-01-01| 2 |
|1 |2018-01-01| 4 |
|2 |2018-01-01| 1 |
+-----------+----------+-----------+
intended outcome - when statement filters for bookings on 2018-01-01
+-----------+----------+-----------+----------+-----------+
|room |timeslot1 | timeslot2 |timeslot3 | timeslot4 |
+-----------+----------+-----------+----------+-----------+
|1 | X | X | | X |
|2 | X | | | |
+-----------+----------+-----------+----------+-----------+
我从这句话开始:
SELECT * from tbl_booking WHERE date = '2018-01-01' GROUP BY room_id
这将返回结果以查看按房间分组的结果。 我想知道我应该从这里去哪里也有结果显示它的时间段显示在当天eacah房间时间段的预订状态的表中?
是否应该使用我应该使用的SQL语句,或者我是否完全在错误的轨道上?
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:1)
您想要对数据做什么并不好,如果您有固定数量的时间段,那么您可以像这样对列进行硬编码:
<input type="submit" name="commit" value="add to cart" class="button">
(见SQL Fiddle)
如果您只想查看是否存在至少1个预订,则可以使用SELECT room_id,
SUM(CASE WHEN timeslot = 1 then 1 else 0 END) AS Timeslot1,
SUM(CASE WHEN timeslot = 2 then 1 else 0 END) AS Timeslot2,
SUM(CASE WHEN timeslot = 3 then 1 else 0 END) AS Timeslot3,
SUM(CASE WHEN timeslot = 4 then 1 else 0 END) AS Timeslot4
FROM tbl_booking
GROUP BY room_id
要包含备注的SQL,您可以通过MAX
MAX
您的延长SQL Fiddle。这不适用于仅有1个选定日期的多个日期
答案 1 :(得分:-1)
如果您正在寻找动态解决方案,那么您必须使用数据透视表。
选择*来自 (从yourtable中选择*)as 不是Temptable 枢轴( 伯爵(室) 对于时间段 在(时段列表)) 作为tempSlot
有关详细信息,请查看此链接MySQL pivot table