簡體   English   中英

PHP的MySQL搜索房間可用性需要幫助更好的SQL查詢

[英]php mysql search for room availability need help for better sql query

我的mysql數據庫是:

BOOKING_ID, FROM_DATE, TO_DATE,
R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17 

其中R1 = room1 ... R17 = room17,如果預訂了room1,則R1將設置為1。

以下是我目前正在使用的sql查詢,我以前從沒學習過sql,我需要幫助以獲取更好的sql查詢!

for($room=1;$room<=$total_room;$room++)
{
  $result = mysql_query("
    SELECT COUNT(`BOOKING_ID`) AS num 
    FROM $search_for_db_table
    WHERE (    (FROM_DATE <= $search_to_date   AND TO_DATE >= $search_to_date )
            OR (FROM_DATE <= $search_from_date AND TO_DATE >= $search_from_date)
            OR (FROM_DATE >= $search_from_date AND TO_DATE <= $search_to_date )
          ) 
      AND R$room=1 
  ") or die(mysql_error());


  $row = mysql_fetch_assoc($result);

  $numUsers[$room] = $row['num']; 
}

//$numUsers[$room]=="0" means room available for booking...

請了解有關設計數據庫的更多信息。 不用為每個房間都使用一列,而是使用多個表來獲取信息,這樣可以使信息更加井井有條。

因此,在該表中創建一個名為“ rooms”的表,假設有15行。 在“ room_number”列中輸入房間號,在“ available”列中輸入1或0。然后,一個簡單的SQL語句顯示可用的房間。

然后,您可以使用:

SELECT 'room_number' FROM rooms WHERE available = '0'

但是,如果您不想修改此“丑陋”的數據模型,則可以使用1個查詢,而不使用17個查詢。 只需對所有17個字段使用SUM(。那么SELECT子句將為:

SELECT SUM(R1) AS sr1, SUM(R2) AS sr2, ...., SUM(R17) as sr17
FROM
WHERE [only with the date restictions]

然后,如果結果集的相應列為0,則該列可用,否則將被占用。

但是同樣,對於錯誤設計的數據模型,這是一個“丑陋”的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM