我想你現在找到自己的解決方案。萬一你仍然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_。因爲它是作業,所以試着從一開始就學習並正確地做。學習方法不重要。:-) –