[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите с поиском
mark1
как сделать так чтоб при поиске по селектам если заполнены не все парвметры поиск осуществлялся по ним,например если заполнить только категорию,из даты выводятся все с этой сat_id

PHP
<?php if($_POST['action']=="search")
{

$query = "SELECT * 
FROM `data` 
WHERE `cat_id`='"
.(int)$_POST['cat']."' 
and `city_id`='"
.(int)$_POST['city']."' 
and `kom_id`='"
.(int)$_POST['komnati']."'
and `sd_id`='"
.(int)$_POST['sdelka']."' 
and `plan_id`='"
.(int)$_POST['planirovka']."' 
and `mat_id`='"
.(int)$_POST['material']."'";
$res = mysql_query($query);
if(!
$res) exit("Ошибка извлечения данных ".mysql_error()); 
 
  while 
($myrow = mysql_fetch_array($res)) 
{
//категории
$categ=$myrow ["cat_id"];
$res1=mysql_query ("SELECT name FROM cat where cat_id='$categ'",$dbh);
$myrow1=mysql_fetch_array ($res1);


//сделка 
$sdel=$myrow ["sd_id"];
$res2=mysql_query ("SELECT name FROM sdelka where sd_id='$sdel'",$dbh);
$myrow2=mysql_fetch_array ($res2);



 
// комнаты
$komn=$myrow ["kom_id"];
$res3=mysql_query ("SELECT kol FROM komnati where kom_id='$komn'",$dbh);
$myrow3=mysql_fetch_array ($res3);
 


//улица 
$cit=$myrow ["city_id"];
$res4=mysql_query ("SELECT name FROM city where city_id='$cit'",$dbh);
$myrow4=mysql_fetch_array ($res4);




//планировка  
$plan=$myrow ["plan_id"];
$res5=mysql_query ("SELECT name FROM planirovka where plan_id='$plan'",$dbh);
$myrow5=mysql_fetch_array ($res5); 
 
//материал 
$mat=$myrow ["mat_id"];
$res6=mysql_query ("SELECT name FROM material where mat_id='$mat'",$dbh);
$myrow6=mysql_fetch_array ($res6);

 

//этаж  
$et=$myrow ["et_id"];
$res7=mysql_query ("SELECT name FROM etag where et_id='$et'",$dbh);
$myrow7=mysql_fetch_array ($res7);

 



//площадь  
$psh=$myrow ["psh_id"];
$res8=mysql_query ("SELECT name FROM ploshad where psh_id='$psh'",$dbh);
$myrow8=mysql_fetch_array ($res8);





//цена  
$cen=$myrow ["cen_id"];
$res9=mysql_query ("SELECT name FROM cena where cen_id='$cen'",$dbh);
$myrow9=mysql_fetch_array ($res9);





printf ("<table  ><tr>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
<td class='t1'>%s</td>
</tr></table>"
,
$myrow4["name"],$myrow1["name"],$myrow2["name"],
$myrow3["kol"],$myrow5["name"],$myrow6["name"],
$myrow7["name"],$myrow8["name"],$myrow9["name"]);

}



}




Спустя 38 минут, 1 секунда (17.10.2009 - 09:30) vagrand написал(а):
Проверяй какие переменный заполнены и соответственно конструируй WHERE для запроса

Спустя 1 день, 3 часа, 3 минуты, 37 секунд (18.10.2009 - 12:34) Tihondrius написал(а):
Значит смотри... Допустим у тя в таблице 3 поля - Id, Name, Description...

Так вот, вводишь три переменные:

$where_id, $where_name, $where_description

где

PHP
$where_id " id = '$id' "
$where_name " name  = '$name' "


и т.д.

затем смотришь заполненны ли тестовые поля, соответствующие переменным $id, $name , а затем на основе этого определяешь, пустые или нет переменные $where_id, $where_name, $where_description:

Например

PHP
if ($id !== ""$where_id " id = '$id' AND ";
else 
$where_id == "";


И так для остальных...

Затем формируешь на основе этого запрос СЕЛЕКТ:

PHP
$sql "SELECT * FROM table_name ";

if ((
$where_id !== "")||($where_name !== "")||($where_description !== "")) $sql .= " WHERE ";

$sql .= " " $where_id " ";
$sql .= " " $where_name " ";
$sql .= " " $where_description " ";


Затем получается что по-любому на конце запроса присутсвует ненужная нам AND... Убираем ее при помощи substr_replace(убираем последние 4 символа - последний AND и пробел):

PHP
$sql substr_replace($sql' ', -4);


Должно работать



Спустя 13 минут, 21 секунда (18.10.2009 - 12:47) sergeiss написал(а):
Tihondrius - в целом идея правильная, только всё это можно очень неплохо оптимизировать smile.gif

В частности, зачем что-то добавлять, а потом это же удалять?

Делаем так. Вводим единый массив $where_array, в который добавляем то, что нам надо, в зависимости от условий. Количество элементнов массива при этом не важно, код очень легко "масштабируется".
PHP
$where_array=array();
if( 
какое_то_условие $where_array[] = "id=$id"// для id
if( другое_условие $where_array[] = "name='$name'"// для name
if( третье_условие $where_array[] = .... ; // условие еще для чего-нибудь
// и так далее, добавляем любое количество элементов в массив
// и далее "склеиваем" все условия в одно:
$where implode' and '$where_array );
// и всё: далее используем $where в запросе
$sql "SELECT * FROM table_name WHERE $where";
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.