[英]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.