Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
16 / 16 / 2
Регистрация: 09.04.2011
Сообщений: 165

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

15.06.2011, 15:55. Показов 1672. Ответов 3
Метки нет (Все метки)

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

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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);
 
     }
 }
 }
Добавлено через 1 час 29 минут
В первой строке забыл 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'
помогите плиз

что-то вообще никто не отвечает
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2011, 15:55
Ответы с готовыми решениями:

Как правильно сформировать запрос mysql в pdo?
Здравствуйте, У меня есть два вопроса: Как правильно сформировать массив подстановки в execute? Как создать метод save, который будет...

Как в sql запрос вставить еще один запрос правильно?
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но выдает он следующее: Запрос: SELECT...

Запрос INSERT INTO как построить запрос правильно?
Народ помогите пожалуйста сделать запрос правильно. Имеется таблица users в ней имеется данные для регистрации и данные для профиля. ...

3
21 / 21 / 3
Регистрация: 05.05.2011
Сообщений: 62
15.06.2011, 16:47
1) некоторые индексы в ассоциативном массиве у тебя повторяются(`komnat`,`S`,`S_zil`,`cena`) , так что получится в итоге массив:
PHP
1
2
3
4
5
6
7
8
$array["`komnat`"] = $f_room3;
$array["`rayon`"] = $area;
$array["`planirovka`"] = $ftype;
$array "`material_sten`"] = $material;
$array[ "`kvartal`"] = $quorter;
$array["`S`" ] = $maxamount;
$array["`S_zil`"] = $maxlamount;
$array[ "`cena`"] = $maxprice;
Поэтому некоторые твои дальнейшие проверки просто не имеют смысла

2) Для того чтобы оценить правильность формирования условия поиска нужно знать назначение параметров поиска и какие условия они накладывают. Пока что можно только догадаться, что $_GET['minprice'] и $_GET['maxprice'] это минимальное и максимальное значение для поля cena и формируемое условие должно быть
cena>=$_GET['minprice'] and cena<=$_GET['maxprice']

Вообще непонятно как формируется условие для параметров $_GET['f_room0'],$_GET['f_room1'] ,$_GET['f_room2'] ,$_GET['f_room3']
0
16 / 16 / 2
Регистрация: 09.04.2011
Сообщений: 165
15.06.2011, 17:27  [ТС]
Сейчас я подробно поясню по параметрам, я вообще честно говоря запарился, уже голова болит даже)

форма выглядит там

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<br /><form id="findForm" method="GET">
<div id="field"><div id="fieldtitle">Комнат:</div> 
<input id="inputCheck" type="checkbox" name="f_room0" value="1">1&nbsp;&nbsp;
<input id="inputCheck" type="checkbox" name="f_room1" value="1">2&nbsp;&nbsp;
<input id="inputCheck" type="checkbox" name="f_room2" value="1">3&nbsp;&nbsp;
<input id="inputCheck" type="checkbox" name="f_room3" value="1">более 3&nbsp;&nbsp;
</div><div id="field"><div id="fieldtitle">Район:</div> 
<select id="rayon_novostr" name="area"><option value=""></option>
<option value="Автозаводской">Автозаводской</option><option value="Жигморе">Жигморе
</option><option value="Жигулевск">Жигулевск</option>
<option value="Комсомольский">Комсомольский</option>
<option value="Поволжский">Поволжский</option>
<option value="Портпоселок">Портпоселок</option>
<option value="Ставропольский">Ставропольский</option>
<option value="Сызранский">Сызранский</option>
<option value="Федоровка">Федоровка</option>
<option value="Центральный">Центральный</option>
<option value="Шигонский">Шигонский</option>
<option value="Шлюзовой">Шлюзовой</option></select></div><div id="field"><div id="fieldtitle">Планировка:</div> 
 
<select id="planirovka_novostr" name="ftype"><option value="">
</option><option value="8-ми квартирная">8-ми квартирная</option><option value="Барская">Барская</option><option value="Брежневка">Брежневка</option><option value="Волга (серия)">Волга (серия)</option><option value="Гостинич.тип">Гостинич.тип</option><option value="Изолированная">Изолированная </option>
<option value="Ленинградская">Ленинградская</option><option value="Макаровская">Макаровская</option><option value="Македонская">
Македонская</option><option value="Монолитная">Монолитная</option><option value="Московская">Московская</option><option value="Олимпийская">Олимпийская</option>
<option value="Самарская">Самарская</option><option value="Самолет">Самолет</option><option value="Ст. Московская">Ст. Московская</option><option value="Сталинская">Сталинская</option>
<option value="Ташкентская">Ташкентская</option><option value="Трамвай">Трамвай</option><option value="Трапеция">Трапеция</option><option value="Улучшенная">Улучшенная</option><option value="Ульяновская">Ульяновская</option><option value="Хрущевка">Хрущевка</option><option value="Экспериментальная">Экспериментальная</option><option value="Элитная">Элитная</option>
<option value="Югославская">Югославская</option></select></div><div id="field"><div id="fieldtitle">Материал стен:</div> <select id="material_novostr" name="material"><option value=""></option><option value="Бетон">Бетон</option><option value="Блочные">Блочные</option><option value="Дерево">Дерево</option><option value="Камень">Камень</option>
<option value="Каркасный">Каркасный</option><option value="Керамз.бетон">Керамз.бетон</option><option value="Кирпич">Кирпич</option><option value="Кирпич+дерево">Кирпич+дерево</option><option value="Литой">Литой</option><option value="Монолит">Монолит</option><option value="Панель">Панель</option><option value="Силикатный кирпич">Силикатный кирпич</option><option value="Шлакобетон">Шлакобетон</option><option value="Щитовой">Щитовой</option>
</select></div><div id="field"><div id="fieldtitle">Квартал:</div> <select id="inputField" name="quorter"><option value=""></option><option value="1">1</option><option value="2">2</option><option value="3А"></option><option value="3Б"></option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option>
<option value="8">8</option><option value="9">9</option><option value="10">10</option>
<option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option>
<option value="16">16</option><option value="17">17</option><option value="18">18
</option><option value="19">19</option><option value="20">20</option><option value="21">21</option></select></div><div id="field"><div id="fieldtitle">Общая площадь:</div> от <input id="inputField" type="text" name="minamount" value="" maxlength="10"> до <input id="inputField" type="text" name="maxamount" value="" maxlength="10"></div><div id="field"><div id="fieldtitle">Жилая площадь:
</div> от <input id="inputField" type="text" name="minlamount" value="" maxlength="10"> до <input id="inputField" type="text" name="maxlamount" value="" maxlength="10"></div><div id="field"><div id="fieldtitle">Цена:</div> от 
<input id="inputField" type="text" name="minprice" value="" maxlength="10"> до <input id="inputField" type="text" name="maxprice" value="" maxlength="10"></div><input type="hidden" name="type_of_realty" value="new_building">
<input type="hidden" name="search" value="find"><input class="buttonSend" type="submit" value="Найти"></form>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 $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;
Добавлено через 11 минут
а насчет индексов я добавил все это в ассоциативный массив, а как по-другому, ведь надо чтобы значения были в массиве, иначе что он будет выводить в запросе, мне все эти условия нужны, ты еще правильно заметил про условия которое формируется в запросе, макспрайс и минпрайс

где есть мин и макс это все поля ввода с макс и мин значениями, а rayon,quorter ftype, material, - это селекты из которых выбираются район и материал, квартал и планировка определенный f_room'ы это чекбоксы которые либо нажаты либо нет, если нажат то передается значение 1
0
21 / 21 / 3
Регистрация: 05.05.2011
Сообщений: 62
15.06.2011, 18:01
1)Метод формы равен get, так что нужно проверять $_GET['search']
2)Условия для полей с несколькими параметрами нужно собирать отдельно
3) примерный ход формирования запроса
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
if(isset($_GET['search'])) // если кнопка нажата
{
    $where=array();
    $o=array();
 
    if(isset($_GET['f_room0']))
    {
        $o[]="komnat='1'";
    }
    if(isset($_GET['f_room1']))
    {
        $o[]="komnat='2'";
    }
    if(isset($_GET['f_room2']))
    {
        $o[]="komnat='3'";
    }
    if(isset($_GET['f_room3']))
    {
        $o[]="komnat>'3'";
    }
    //насколько я понял количество комнат должно удовлетворять одному из выбранных условий
    if(sizeof($o)>0)
    {
        $where[]='('.implode(' or ',$o).")";
    }
    if(isset($_GET['rayon']) and $_GET['rayon']!='')
    {
        $rayon=mysql_real_escape_string($_GET['rayon']);
        $where[]="(rayon='$rayon')";
    }
    if(isset($_GET['ftype']) and $_GET['ftype']!='')
    {
        $ftype=mysql_real_escape_string($_GET['ftype']);
        $where[]="(planirovka='$ftype')";
    }  
    if(isset($_GET['material']) and $_GET['material']!='')
    {
        $material=mysql_real_escape_string($_GET['material']);
        $where[]="(material_sten='$material')";
    }    
    if(isset($_GET['quorter']) and $_GET['quorter']!='')
    {
        $quorter=mysql_real_escape_string($_GET['quorter']);
        $where[]="(kvartal='$quorter')";
    }    
    $o=array();    
    if(isset($_GET['minamount']) and $_GET['minamount']!='')
    {                                                     
        $v=floatval($_GET['minamount']); 
        $o[]="s>='$v'";
    }
    if(isset($_GET['maxamount']) and $_GET['maxamount']!='')
    {                            
        $v=floatval($_GET['maxamount']); 
        $o[]="s<='$v'";
    }
    if(sizeof($o)>0)
    {
        $where[]='('.implode(' and ',$o).")";
    }   
    $o=array();    
    if(isset($_GET['minlamount']) and $_GET['minlamount']!='')
    {     
        $v=floatval($_GET['minlamount']); 
        $o[]="s_zil>='$v'";
    }
    if(isset($_GET['maxlamount']) and $_GET['maxlamount']!='')
    {                                   
        $v=floatval($_GET['maxlamount']); 
        $o[]="s_zil<='$v'";
    }
    if(sizeof($o)>0)
    {
        $where[]='('.implode(' and ',$o).")";
    }     
    $o=array();    
    if(isset($_GET['minprice']) and $_GET['minprice']!='')
    {                              
        $v=floatval($_GET['minprice']);
        $o[]="cena>='$v'";
    }
    if(isset($_GET['maxprice']) and $_GET['maxprice']!='')
    {                     
        $v=floatval($_GET['maxprice']);
        $o[]="cena<='$v'";
    }
    if(sizeof($o)>0)
    {
        $where[]='('.implode(' and ',$o).")";
    }
    if(sizeof($where)>0)
    {
        $cond='where '.implode(' and ',$where);
    }                
    else
    {
        $cond='';
    }
    $sql = "SELECT * FROM `novostr` $cond";
 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2011, 18:01
Помогаю со студенческими работами здесь

Динамический запрос???
Люди добрые помогите, совсем запуталась!!!! Есть такая здоровая таблица, в которой хранятся данные о недвижимости, вот запрос к этой...

динамический запрос
Буду очень признателен если кто-нибудь мне подскажет почему данная связка не работает &lt;?php $login = $_SESSION; ...

Динамический запрос
Доброй ночи всем! Друзья, помогите написать SELECT на основе имён таблиц и полей, привязанных к ним, которые хранятся, к примеру, в...

Динамический запрос к двум таблицам IBQuery
как сделать ???????????????(Динамический запрос к двум таблицам IBQuery

Динамический sql запрос с 4-мя независимыми условиями
Всем привет. Возникла следущая проблема-нужно составить динамический sql запрос, который может содержать до 4-х(включительно) независимых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru