Правильно сформировать динамический запрос

Aleks-prog

Новичок
Здравствуйте,
такая проблемка
MySQL пишет что запрос пуст was empty, правильно ли я его формирую?
я так обрабатываю все данные из формы переданные методом GET,
в данном скрипте вывода нет просто формируется динамически запрос к БД
если не трудно помогите разобраться, нужно чтобы в запрос добавлялись операторы <= => в зависимости от того какие данные были получены из формы
нжно чтобы запрос был не пуст

PHP:
if(isset($_POST['search'])) // если кнопка нажата
 {
     // Пришедшие данные
         $f_room0 = isset($_GET['f_room0']) ? $_GET['f_room0'] : 0;
     $f_room1 = isset($_GET['f_room1']) ? $_GET['f_room1'] : 0;
     $f_room2 = isset($_GET['f_room2']) ? $_GET['f_room2'] : 0;
    $f_room3 = isset($_GET['f_room3']) ? $_GET['f_room3'] : 0;
        $rayon = isset($_GET['rayon']) ? $_GET['rayon'] : 0;
        $ftype = isset($_GET['ftype']) ? $_GET['ftype'] : 0;
        $material = isset($_GET['material']) ? $_GET['material'] : 0;
        $quorter = isset($_GET['quorter']) ? $_GET['quorter'] : 0;
        $minamount = isset($_GET['minamount']) ? $_GET['minamount'] : 0;
        $maxamount= isset($_GET['maxamount']) ? $_GET['maxamount'] : 0;
        $minlamount = isset($_GET['minlamount']) ? $_GET['minlamount'] : 0;
        $maxlamount= isset($_GET['maxlamount']) ? $_GET['maxlamount'] : 0;
                $minprice = isset($_GET['minprice']) ? $_GET['minprice'] : 0;
        $maxprice= isset($_GET['maxprice']) ? $_GET['maxprice'] : 0;
 
 // создаем ассоциативный массив
 $array = array(
                 "`komnat`" => $f_room0,
              "`komnat`" => $f_room1,
                          "`komnat`" => $f_room2,
                          "`komnat`" => $f_room3,
                          "`rayon`" => $area,
                          "`planirovka`" => $ftype,
                          "`material_sten`" => $material,
                          "`kvartal`" => $quorter,
                          "`S`" => $minamount,
                          "`S`" => $maxamount,
                          "`S_zil`" => $minlamount,
                          "`S_zil`" => $maxlamount,
                                  "`cena`" => $minprice,
                          "`cena`" => $maxprice,
               );
 // Начальная строчка запроса
 $sql = "SELECT * FROM `novostr`";
 
 //Создаем пустой масив для условия WHERE
 $sql_where = array();
 
 //Перебираем массив
 foreach($array as $key => $value)
 {
     // Если есть 0 в запросе отсеиваем его
     if(!empty($value))
         if($array[$key]==$minamount){
         $sql_where[] = $key." >= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         elseif($array[$key]==$maxamount){
         $sql_where[] = $key." <= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         elseif($array[$key]==$minlamount){
         $sql_where[] = $key." <= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         elseif($array[$key]==$maxlamount){
         $sql_where[] = $key." <= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         elseif($array[$key]==$minprice){
         $sql_where[] = $key." <= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         elseif($array[$key]==$maxprice){
         $sql_where[] = $key." <= ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
         else{
     $sql_where[] = $key." = ".$value;
         if(count($sql_where) > 0)
 {
 $sql .=" WHERE ";
 }
 //Формируем окончательную строку запроса
 $sql.=" ".implode(" AND ", $sql_where);
 
         }
 }
 }
 

Aleks-prog

Новичок
В первой строке забыл GET прописать)))
но вот проблемка - он выводит данные но все, не ставит ограничения которые я наложил с помощью формы... с этими if elseif внизу кода может я намудрил,
выдал ошибку вот сейчас Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\agency\index.php on line 551
Unknown column 'Бетон' in 'where clause'
помогите плиз
 

Aleks-prog

Новичок
дамп
SELECT * FROM novostr WHERE planirovka = Барская


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\agency\index.php on line 553
Unknown column 'Барская' in 'where clause'
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
кавычки не для вас придумали?
 

Aleks-prog

Новичок
PHP:
$sql_where[] = $key." <= ".$value;
вот это выражение которое формирует условие в запросе, $value для чисел и для строк одновременно
да planirovka VARCHAR, но другое значение будет числом,
 

Вурдалак

Продвинутый новичок
Это понятно, но $array[$key] это то же самое, что и $value в данном контексте.
 

Aleks-prog

Новичок
Вставил кавычки и все заработало, но новая проблема
только проблема с чекбоксами, когда выбираю по комнатам 1, 2, 3, а вот более 3 проблема, где лучше прописать условие >3, так как у меня там значение 3 из чек бокса приходит
 

baev

‹°°¬•
Команда форума
— там всё нормально, разве что лучше $value вместо $array[$key] писать.
— да, не туда посмотрел.

Только я всё равно логики скрипта не понимаю:
— сначала создаётся ассоциативный массив, в котором названия ключей зачем-то дублируются;
— потом значение каждого из элементов массива зачем-то сравнивается со значениями других элементов массива…

Aleks-prog, покажите, какой запрос у Вас в результате получается.
 

Aleks-prog

Новичок
SELECT * FROM novostr WHERE rayon = 'Автозаводской' WHERE rayon = 'Автозаводской' AND planirovka = 'Барская' WHERE rayon = 'Автозаводской' AND planirovka = 'Барская' AND kvartal = '3' WHERE rayon = 'Автозаводской' AND planirovka = 'Барская' AND kvartal = '3' AND S <= '45' WHERE rayon = 'Автозаводской' AND planirovka = 'Барская' AND kvartal = '3' AND S <= '45' AND S_zil <= '40' WHERE rayon = 'Автозаводской' AND planirovka = 'Барская' AND kvartal = '3' AND S <= '45' AND S_zil <= '40' AND cena <= '1500'
 

HEm

Сетевой бобер
WHERE ... WHERE ... WHERE ... WHERE ... WHERE ...

втыкаешь запрос в phpMyAdmin и думаешь над ошибкой, на которую он тебе указывает
 
Сверху