2008-11-25 280 views
1

我一直在試圖解決這個問題一天。 我甚至放棄了一段時間,因爲我是一個PHP新手,我需要幫助。幫助SQL查詢

這是我的問題: 我有一個查詢,選擇表中'酒店'的所有適當的記錄,然後爲每個酒店查找某個表中'某些類型的預訂房間'和所有這些在某個時間段。 因此,我首先根據搜索表單提供的位置從「hotel_table」中取出所有hotel_id,並對每個hotel_id通過'booked_rooms'表循環。

下面的代碼:

if(isset($_GET['book'])){ 
$sql=mysql_query("SELECT hotel_id FROM 'hotels' WHERE city='$city") or die(mysql_error()); 
while($row=mysql_fetch_array($sql)){ 
    $sql_2=mysql_query("SELECT * FROM `booked_rooms` WHERE hotel_id='$hotel_id' 
    AND arrival_date BETWEEN '$arrival_date' AND '$departure_date' 
    OR departure_date BETWEEN '$arrival_date' AND '$departure_date'") 
or die(mysql_error()); 
} 

while($row_2=mysql_fetch_array($sql_2)){ 
    print_r($row_2); 
} 

} 
// $city, $arrival_date and $departure date are values retrieved from the search form 

的問題是,我得到一個循環通過「酒店」表,並得到所有適當的位置hotel_ids,但一無所獲與打印$ row_2陣列。 我試着在'foreach'循環中使用JOINS,但也沒有運氣。 我知道這是一個微不足道的問題,但我還在學習,所以任何提示都非常受歡迎。 在此先感謝。

回答

5

不知道PHP,你可以在一個查詢中做到這一點?

SELECT booked_rooms.*, hotels.* FROM 'hotels' 
JOIN 'booked_rooms' ON hotels.hotel_id = booked_rooms.hotel_id 
WHERE 
    hotels.city='$city" AND 
    (
    booked_rooms.arrival_date BETWEEN '$arrival_date' AND '$departure_date' OR 
    booked_rooms.departure_date BETWEEN '$arrival_date' AND '$departure_date') 

檢查'所必需的PHP字符串等在你的桌子報價...

1

首先,你必須在你的第一個SQL的錯誤你有沒有引用您的城市名正常。然後,您不會從結果集中獲取hotel_id。然後你在錯誤的地方有第二個循環。

嘗試以下操作:

if(isset($_GET['book'])) { 
    $sql = mysql_query("SELECT hotel_id FROM 'hotels' WHERE city='".mysql_real_escape_string($city)."'") or die(mysql_error()); 

    $arrival_date = mysql_real_escape_string($arrival_date); 
    $departure_date = mysql_real_escape_string($departure_date); 
    while($row = mysql_fetch_assoc($sql)) { 
     $hotel_id = $row['hotel_id']; 
     $sql_2 = mysql_query("SELECT * 
      FROM `booked_rooms` 
      WHERE hotel_id = ".$hotel_id." 
       AND (
        arrival_date BETWEEN '".$arrival_date."' AND '".$departure_date."' 
        OR departure_date BETWEEN '".$arrival_date."' AND '".$departure_date."' 
       )") 
     or die(mysql_error()); 

     while($row_2 = mysql_fetch_assoc($sql_2)) { 
      print_r($row_2); 
     } 
    } 

} 

// $city, $arrival_date and $departure date are values retrieved from the search form 

我也建議是在你的空白更慷慨。它使PHP更易於閱讀。

+0

你不需要在where子句的第二部分圍繞括號嗎?否則,這些謂詞的優先級不清楚......? – Codewerks 2008-11-25 03:30:49

+0

當。你是對的。我的意思是添加這些,但分心。它是固定的。 – staticsan 2008-11-25 05:06:39

1

請不要將來自外部的不可信的數據構建S​​QL查詢。這是鮑比表問題。

有關使用參數化語句的詳細信息,請參閱this one這樣的頁面。