при поиске по селектам,надо если заполнены не все поля искать по ним ,тут посоветовали как сделать,но что то не работает,из data ничего не вытаскивает
PHP |
<?php if (isset($_POST['cat'])) $cat_id = $_POST['cat']; if (isset($_POST['city'])) $city_id = $_POST['city']; if (isset($_POST['komnati'])) $kom_id = $_POST['komnati']; if (isset($_POST['sdelka'])) $sd_id = $_POST['sdelka']; if (isset($_POST['planirovka'])) $plan_id = $_POST['planirovka']; if (isset($_POST['material'])) $mat_id = $_POST['material'];
$where_cat_id = " cat_id = '$cat_id' "; $where_city_id = " city_id = '$city_id' "; $where_kom_id = " kom_id = '$kom_id' "; $where_sd_id = " sd_id = '$sd_id' "; $where_plan_id = " plan_id = '$plan_id' "; $where_mat_id = " mat_id = '$mat_id' ";
if ($сat_id !== "") $where_cat_id = " cat_id = '$cat_id' AND "; else $where_cat_id == "";
if ($city_id !== "") $where_city_id = " city_id = '$city_id' AND "; else $where_city_id == "";
if ($kom_id !== "") $where_kom_id = " kom_id = '$kom_id' AND "; else $where_kom_id == "";
if ($sd_id !== "") $where_sd_id = " sd_id = '$sd_id' AND "; else $where_sd_id == "";
if ($plan_id !== "") $where_plan_id = " plan_id = '$plan_id' AND "; else $where_plan_id == "";
if ($mat_id !== "") $where_mat_id = " mat_id = '$mat_id' AND "; else $where_mat_id == "";
if($_POST['action']=="search") {
$sql = "SELECT * FROM data ";
if (($where_cat_id !== "")||($where_city_id !== "")||($where_kom_id !== "")||($where_sd_id !== "")||($where_plan_id !== "")||($where_mat_id !== "")) $sql .= " WHERE ";
$sql .= " " . $where_cat_id . " "; $sql .= " " . $where_city_id . " "; $sql .= " " . $where_kom_id . " "; $sql .= " " . $where_sd_id . " "; $sql .= " " . $where_plan_id . " "; $sql .= " " . $where_mat_id . " ";
$sql = substr_replace($sql, ' ', -5);
$res = mysql_query($sql); if(!$res) exit("Ошибка извлечения данных ".mysql_error()); |
Спустя 10 часов, 18 минут, 1 секунда (19.10.2009 - 09:51) stepan написал(а):
Цитата (mark1 @ 18.10.2009 - 20:33) |
при поиске по селектам,надо если заполнены не все поля искать по ним |
По ним это по ком?
Далее не ошибки а рекомендации, т.к. код и так нагружен и для прочтения тяжел
вот это
PHP |
if (isset($_POST['cat'])) $cat_id = $_POST['cat']; if (isset($_POST['city'])) $city_id = $_POST['city']; |
лучше писать вот так
PHP |
$cat_id = isset($_POST['cat'])? $_POST['cat'] : null; $city_id = isset($_POST['city'])? $_POST['city'] : null; |
PHP |
$where_cat_id = " cat_id = '$cat_id' "; |
вот так
PHP |
$where_cat_id = " cat_id = '".$cat_id."' "; |
далее даже смотреть не хочется.
да и вообще ты ошибку напиши которую выводит.
Спустя 22 минуты, 35 секунд (19.10.2009 - 10:13) mark1 написал(а):
ошибку не выводит просто из data ничего не выбирает,поиск должен осуществлятся по любому заполненому селекту
Спустя 38 минут, 29 секунд (19.10.2009 - 10:52) stepan написал(а):
Ну изначально посмотри что у тебя получается, а потом делай выборку
PHP |
echo $sql; $query = mysql_query ( $sql ); |
да и для завершение запроса тебе еще не хватает
PHP |
$result = mysql_fetch_array ( $query ); echo mysql_error (); echo 'Что же у нас на выходе - '; var_dump ( $result ); |
Спустя 58 минут, 21 секунда (19.10.2009 - 11:50) mark1 написал(а):
выдается
SELECT * FROM data WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Что же у нас на выходе - bool(false) при заполнении cat и city
Спустя 37 минут, 5 секунд (19.10.2009 - 12:27) Kuliev написал(а):
mark1
SQL |
SELECT * FROM `data` WHERE |
data зарезервировано MySQL по этому нужно брать в обратные кавычки
Спустя 37 минут, 50 секунд (19.10.2009 - 13:05) Семён написал(а):
Цитата (Kuliev @ 19.10.2009 - 13:27) |
mark1
SQL | SELECT * FROM `data` WHERE |
data зарезервировано MySQL по этому нужно брать в обратные кавычки
|
data не зарезервированное слово, эт так к сведению
Спустя 44 минуты, 59 секунд (19.10.2009 - 13:50) stepan написал(а):
Пробуй вот это
PHP |
$sql = " SELECT * FROM `data` WHERE `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' "; $query = mysql_query ( $sql ); $result = mysql_fetch_array ( $query ); var_dump ( $result ); |
если заработало значит от этого надо отталкиваться...
если не заработало пробуй вывести без WHERE
Спустя 21 минута, 47 секунд (19.10.2009 - 14:12) mark1 написал(а):
в общем вывожу так
PHP |
<?php $cat_id = isset($_POST['cat'])? $_POST['cat'] : null; $city_id = isset($_POST['city'])? $_POST['city'] : null; $kom_id = isset($_POST['komnati'])? $_POST['komnati'] : null; $sd_id = isset($_POST['sdelka'])? $_POST['sdelka'] : null; $plan_id = isset($_POST['planirovka'])? $_POST['planirovka'] : null; $mat_id = isset($_POST['material'])? $_POST['material'] : null;
$where_cat_id = " cat_id = '".$cat_id."' "; $where_city_id = " city_id = '".$city_id."' "; $where_kom_id = " kom_id = '".$kom_id."' "; $where_sd_id = " sd_id = '".$sd_id."' "; $where_plan_id = " plan_id = '".$plan_id."' "; $where_mat_id = " mat_id = '".$mat_id."' ";
if ($сat_id !== "") $where_cat_id = " cat_id = '$cat_id' AND "; else $where_cat_id == "";
if ($city_id !== "") $where_city_id = " city_id = '$city_id' AND "; else $where_city_id == "";
if ($kom_id !== "") $where_kom_id = " kom_id = '$kom_id' AND "; else $where_kom_id == "";
if ($sd_id !== "") $where_sd_id = " sd_id = '$sd_id' AND "; else $where_sd_id == "";
if ($plan_id !== "") $where_plan_id = " plan_id = '$plan_id' AND "; else $where_plan_id == "";
if ($mat_id !== "") $where_mat_id = " mat_id = '$mat_id' AND "; else $where_mat_id == "";
if($_POST['action']=="search") {
$sql = "SELECT * FROM `data` WHERE `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' ";
if (($where_cat_id !== "")||($where_city_id !== "")||($where_kom_id !== "")||($where_sd_id !== "")||($where_plan_id !== "")||($where_mat_id !== "")) $sql .= " WHERE ";
$sql .= " " . $where_cat_id . " "; $sql .= " " . $where_city_id . " "; $sql .= " " . $where_kom_id . " "; $sql .= " " . $where_sd_id . " "; $sql .= " " . $where_plan_id . " "; $sql .= " " . $where_mat_id . " ";
$sql = substr_replace($sql, ' ', -5);
echo $sql; $query = mysql_query ( $sql ); if(!$query) exit("Ошибка извлечения данных ".mysql_error()); $result = mysql_fetch_array ( $query ); echo mysql_error (); echo 'Что же у нас на выходе - '; var_dump ( $result ); while ($result = mysql_fetch_array($query)) { //категории $categ=$result ["cat_id"]; $res1=mysql_query ("SELECT name FROM cat where cat_id='$categ'",$dbh); $myrow1=mysql_fetch_array ($res1);
//сделка $sdel=$result ["sd_id"]; $res2=mysql_query ("SELECT name FROM sdelka where sd_id='$sdel'",$dbh); $myrow2=mysql_fetch_array ($res2);
// комнаты $komn=$result ["kom_id"]; $res3=mysql_query ("SELECT kol FROM komnati where kom_id='$komn'",$dbh); $myrow3=mysql_fetch_array ($res3);
//улица $cit=$result ["city_id"]; $res4=mysql_query ("SELECT name FROM city where city_id='$cit'",$dbh); $myrow4=mysql_fetch_array ($res4);
//планировка $plan=$result ["plan_id"]; $res5=mysql_query ("SELECT name FROM planirovka where plan_id='$plan'",$dbh); $myrow5=mysql_fetch_array ($res5); //материал $mat=$result ["mat_id"]; $res6=mysql_query ("SELECT name FROM material where mat_id='$mat'",$dbh); $myrow6=mysql_fetch_array ($res6);
//этаж $et=$result ["et_id"]; $res7=mysql_query ("SELECT name FROM etag where et_id='$et'",$dbh); $myrow7=mysql_fetch_array ($res7);
//площадь $psh=$result ["psh_id"]; $res8=mysql_query ("SELECT name FROM ploshad where psh_id='$psh'",$dbh); $myrow8=mysql_fetch_array ($res8);
//цена $cen=$result ["cen_id"]; $res9=mysql_query ("SELECT name FROM cena where cen_id='$cen'",$dbh); $myrow9=mysql_fetch_array ($res9);
printf ("<table ><tr><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td></tr></table>",$myrow4["name"],$myrow1["name"],$myrow2["name"],$myrow3["kol"],$myrow5["name"],$myrow6["name"],$myrow7["name"],$myrow8["name"],$myrow9["name"]);
}
} |
выходит SELECT * FROM `data` `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Ошибка извлечения данных You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1' AND `city_id` = '5' AND `kom_id` = '0' ' at line 1
в таблице data у меня хранятся id других таблиц,поля name которых надо вывести
Спустя 7 минут, 4 секунды (19.10.2009 - 14:19) stepan написал(а):
Спустя 1 минута, 37 секунд (19.10.2009 - 14:21) Gram написал(а):
Выложите свой дамп а.
Вот такого не должно быть
выходит SELECT * FROM `data` `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0'
в частности FROM `data` `cat_id` = '1'
Спустя 4 минуты, 17 секунд (19.10.2009 - 14:25) stepan написал(а):
я имел введу без WHERE т.е.
Спустя 4 минуты, 21 секунда (19.10.2009 - 14:29) Gram написал(а):
А еще в вот в этой строчке
PHP |
if ($сat_id !== "") $where_cat_id = " cat_id = '$cat_id' AND "; else $where_cat_id == ""; |
в названии переменной
первая буква не английская си , а русская. может из-за этого все ваши проблемы
Спустя 13 минут, 6 секунд (19.10.2009 - 14:42) mark1 написал(а):
без where нже выводил в самом начале,выдает при выборе city и cat
SELECT * FROM `data` WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Что же у нас на выходе - bool(false)
выводится если только все селекты заполнены
Спустя 22 минуты, 19 секунд (19.10.2009 - 15:05) Gram написал(а):
На пару часов уехать надо, приду напишу тебе решение, если раньше никто не напишет. А ты уже несколько дней этот запрос мучаешь)))
Спустя 2 минуты, 12 секунд (19.10.2009 - 15:07) mark1 написал(а):
точно,я тут совсем новичок,особенно в синтаксисе
Спустя 29 минут, 56 секунд (19.10.2009 - 15:37) Gram написал(а):
PHP |
$cat_id = isset($_POST['cat'])? trim($_POST['cat']) : null; $city_id = isset($_POST['city'])? trim($_POST['city']) : null; $kom_id = isset($_POST['komnati'])? trim($_POST['komnati']) : null; $sd_id = isset($_POST['sdelka'])? trim($_POST['sdelka']) : null; $plan_id = isset($_POST['planirovka'])? trim($_POST['planirovka']) : null; $mat_id = isset($_POST['material'])? trim($_POST['material']) : null;
if ($cat_id !== "") $where_cat_id = " `cat_id` = " . $cat_id . " AND "; else $where_cat_id == ""; if ($city_id !== "") $where_city_id = " `city_id` = " . $city_id . " AND "; else $where_city_id == ""; if ($kom_id !== "") $where_kom_id = " `kom_id` = " . $kom_id . " AND "; else $where_kom_id == ""; if ($sd_id !== "") $where_sd_id = " `sd_id` = " . $sd_id . " AND "; else $where_sd_id == ""; if ($plan_id !== "") $where_plan_id = " `plan_id` = " . $plan_id . " AND "; else $where_plan_id == ""; if ($mat_id !== "") $where_mat_id = " `mat_id` = " . $mat_id . " AND "; else $where_mat_id == "";
$sql = "SELECT * FROM `data`"; if ( ($where_cat_id !== "") || ($where_city_id !== "") || ($where_kom_id !== "") || ($where_sd_id !== "") || ($where_plan_id !== "") || ($where_mat_id !== "") ) $sql .= " WHERE ";
$sql .= $where_cat_id; $sql .= $where_city_id; $sql .= $where_kom_id; $sql .= $where_sd_id; $sql .= $where_plan_id; $sql .= $where_mat_id;
$sql = substr_replace($sql, '', -4);
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res)) { echo '<pre>'; print_r($row); }
echo $sql; |
Спустя 55 минут, 10 секунд (19.10.2009 - 16:32) mark1 написал(а):
спасиба,но так тоже работает тока если все селекты выбирать,потому что эти невыбранные переменные становятся равны "0" и в таблице тоже соответственно ищутся как ноль,их надо как то уничтожать чтоб они в запросе не участвовали
Спустя 2 часа, 14 минут, 4 секунды (19.10.2009 - 18:46) Kuliev написал(а):
mark1
Если Вы используете SELECT для выборки, то все очень просто
PHP |
<?php // Пример: // Пришедшие данные $a = 0; $b = 1; $c = 3; $d = 4; $e = 0;
// создаем ассоциативный массив $array = array( "`id_cat_1`" => $a, "`id_cat_2`" => $b, "`id_cat_3`" => $c, "`id_cat_4`" => $d, "`id_cat_5`" => $e ); // Начальная строчка запроса $sql = "SELECT * FROM `data`";
//Создаем пустой масив для условия WHERE $sql_where = array();
//Перебираем массив foreach($array as $key => $value) { // Если есть 0 в запросе отсеиваем его if(!empty($value)) $sql_where[] = $key." = ".intval($value); }
//Проверяем нужно ли подставлять условие WHERE в запрос if(count($sql_where) > 0) $sql .=" WHERE ";
//Формируем окончательную строку запроса $sql.=" ".implode(" AND ", $sql_where);
//Собственно вот что получилось echo $sql; |