帮助SQL查询

时间:2008-11-25 02:42:24

标签: php mysql

我一直试图解决这个问题一天。 我甚至放弃了一段时间,因为我是一个PHP新手,我需要帮助。

这是我的问题: 我有一个查询,在表'酒店'中选择所有适当的记录,然后每个酒店在表'scheduled_rooms'中查找某些类型的预订房间,并在一段时间内查找所有这些。 首先,我根据搜索表单提供的位置从'hotel_table'中取出所有hotel_ids,并且每个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'表获得了一个循环并获得了适合该位置的所有hotel_ids,但是没有打印$ row_2数组。 我尝试在SQL,'foreach'循环中使用JOINS,但也没有运气。 我知道这是一个微不足道的问题,但我还在学习,所以任何提示都受到高度欢迎。 提前谢谢。

3 个答案:

答案 0 :(得分: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 :(得分: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更容易阅读。

答案 2 :(得分:1)

请不要从外部,不受信任的数据中放置构建SQL查询。这是Bobby Tables的问题。

有关使用参数化语句的详细信息,请参阅this one之类的网页。