我想你现在找到自己的解决方案。万一你仍然inetested在已经做在SQL查询的工作方案,看看这个:
SELECT group_concat(name) names, count(CASE room1 WHEN '1' THEN 1 END) r1, count(CASE room2 WHEN '1' THEN 1 END) r2,
count(CASE room3 WHEN '1' THEN 1 END) r3, count(CASE room4 WHEN '1' THEN 1 END) r4, count(CASE room5 WHEN '1' THEN 1 END) r5,
count(CASE room6 WHEN '1' THEN 1 END) r6, count(CASE room7 WHEN '1' THEN 1 END) r7, count(CASE room8 WHEN '1' THEN 1 END) r8,
count(CASE room9 WHEN '1' THEN 1 END) r9, count(CASE room10 WHEN '1' THEN 1 END) r10,count(CASE room11 WHEN '1' THEN 1 END) r11,
count(CASE room12 WHEN '1' THEN 1 END) r12, count(CASE room13 WHEN '1' THEN 1 END) r13, count(CASE room14 WHEN '1' THEN 1 END) r14
FROM tbl where '20170823' between start and enddt-interval 1 day
它导致这样的事情
names r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14
Charlie,Sally,Patty 0 1 2 0 0 0 0 0 0 0 0 0 0 0
你可以玩与它周围的位置:(我用MySQL的特定功能group_concat()
也显示的当前所选择的日期的所有客人的名字)http://rextester.com/HNDA58846
如果你想与结果表(预约日期序列)结束了,你可以稍微改变它
SELECT dt,
group_concat(name) names, count(CASE room1 WHEN '1' THEN 1 END) r1, count(CASE room2 WHEN '1' THEN 1 END) r2,
count(CASE room3 WHEN '1' THEN 1 END) r3, count(CASE room4 WHEN '1' THEN 1 END) r4, count(CASE room5 WHEN '1' THEN 1 END) r5,
count(CASE room6 WHEN '1' THEN 1 END) r6, count(CASE room7 WHEN '1' THEN 1 END) r7, count(CASE room8 WHEN '1' THEN 1 END) r8,
count(CASE room9 WHEN '1' THEN 1 END) r9, count(CASE room10 WHEN '1' THEN 1 END) r10,count(CASE room11 WHEN '1' THEN 1 END) r11,
count(CASE room12 WHEN '1' THEN 1 END) r12, count(CASE room13 WHEN '1' THEN 1 END) r13, count(CASE room14 WHEN '1' THEN 1 END) r14
FROM tbl
INNER JOIN (SELECT '20170823' dt UNION ALL SELECT '20170824' UNION ALL SELECT '20170825') dates
ON dt between start and enddt-interval 1 day
GROUP BY dt
的WHERE
条款更改为子查询的ON
条款和dt
正在从拉加入子查询(或者如果你愿意的话,也可以是其他表)。结果:
dt names r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14
20170823 Sally,Charlie,Patty 0 1 2 0 0 0 0 0 0 0 0 0 0 0
20170824 Sally,Charlie,Patty 0 1 2 0 0 0 0 0 0 0 0 0 0 0
20170825 Sally,Patty 0 1 1 0 0 0 0 0 0 0 0 0 0 0
如果你碰巧有您的数据库中理货表,一个简单的表,连续的数字是这样的:
id
---
1
2
3
4
.
..
50
,你可以做一个INNER JOIN
用它来获得,当有人所有日期实际上是在你的房间一个:
...
LEFT JOIN (SELECT CAST('20170801' as date)+ interval id day dt FROM tally) dates
...
或RIGHT JOIN
,如果你想克服的概述一定的日期范围与全部它的房间(空或不)。
您需要重构您的数据库设计。有一张桌子和房间'ID,房间'。然后为客人准备一张桌子:'身份证,姓名,电子邮件等......'。然后你可以有第三张桌子连接客人和房间。我们称它为预订:'id,guest_id,room_id,check_in,check_out'。现在,您可以使用一些简单的连接轻松获取各种列表。 –
和这个表吗?这是不可能的? –
如果您遍历结果并重新构造PHP中的数据,则可以_can_。因为它是作业,所以试着从一开始就学习并正确地做。学习方法不重要。:-) –