Помогите с запросом SQL - PullRequest
       15

Помогите с запросом SQL

1 голос
/ 25 ноября 2008

Я застрял в попытке решить эту проблему в течение нескольких дней. Я даже на некоторое время сдаюсь, и, поскольку я новичок в PHP, мне нужна помощь.

Это моя проблема: У меня есть запрос, который выбирает все подходящие записи в таблице 'hotels', а затем для каждого отеля ищет забронированный номер определенного типа в таблице 'booked_rooms' и все это на определенный период. Итак, сначала я извлекаю все hotel_ids из 'hotel_table' на основе местоположения, указанного в форме поиска, и для каждого 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. Я пытался использовать JOINS в SQL, цикл 'foreach', но тоже не повезло. Я знаю, что это тривиальные вопросы, но я все еще учусь, поэтому любые советы приветствуются. Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 25 ноября 2008

Не зная 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 голос
/ 25 ноября 2008

Пожалуйста, не размещайте запросы на сборку SQL извне, недоверенные данные. Это проблема Бобби Таблиц.

Пожалуйста, смотрите страницу типа на этой для подробностей об использовании параметризованных операторов.

1 голос
/ 25 ноября 2008

Прежде всего, у вас есть ошибка в вашем первом 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...