2017-09-23 61 views
-1

我有一個家庭作業數據庫,用於存儲酒店預訂。如何顯示一次當前狀態?

我必須根據日期檢查預約。

例如:

2017年6月14日

查詢返回房間號,並打印出的可用性。

$selectedDay = $_POST['selectedDay']; 
$select_date = "SELECT DISTINCT * FROM events WHERE '$selectedDay' BETWEEN start AND end - INTERVAL 1 DAY"; 
$result = mysqli_query($connection, $select_date); 
echo "<h2>Free rooms in this date: <br/> $selectedDay</h2>"; 
if (mysqli_num_rows($result) > 0) { 

    While ($row = mysqli_fetch_array($result)) { 
     echo "<h3>" . $row['name'] . "</h3>"; 
     for ($i = 1; $i < 20; $i++) { 
      if ($row['room' . $i] == '1') { 
       echo "Room " . $i . ": <span style='color:red;'>busy</span> <br />"; 
      } else { 
       echo "Room " . $i . ": <span style='color:green;'>free/span> <br />"; 
      } 
     } 
    } 
} else { 
    echo "No data for this date."; 
} 

我想要ONE房間的總體列表,現在如果在選定日期有3位客人,列表將被打印3次。

圖片表: https://ibb.co/jBVcik

+1

您需要重構您的數據庫設計。有一張桌子和房間'ID,房間'。然後爲客人準備一張桌子:'身份證,姓名,電子郵件等......'。然後你可以有第三張桌子連接客人和房間。我們稱它爲預訂:'id,guest_id,room_id,check_in,check_out'。現在,您可以使用一些簡單的連接輕鬆獲取各種列表。 –

+0

和這個表嗎?這是不可能的? –

+0

如果您遍歷結果並重新構造PHP中的數據,則可以_can_。因爲它是作業,所以試着從一開始就學習並正確地做。學習方法不重要。:-) –

回答

0

我想你現在找到自己的解決方案。萬一你仍然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,如果你想克服的概述一定的日期範圍與全部它的房間(空或不)。

相關問題