Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: параметры поиска
 
 автор: moonfox   (04.09.2005 в 19:48)   письмо автору
 
 

привет!

у меня форма поиска содержит 12 полей - условий для поиска как сделать чтоб не приходилось перебирать все варианты поиска, а чтоб если в поле ничего не указано (нет текста) то поиск производится всех значений, а если указано то соотвественного по указаному параметру - поиск в mysql

а то с перебором вариантов если а="что-то" а в="" то..... и тд и тп. далеко не уедешь

   
 
 автор: cheops   (05.09.2005 в 01:21)   письмо автору
 
   для: moonfox   (04.09.2005 в 19:48)
 

Формируйте SQL-запрос не целиком, а по кускам
<?php
  $query 
"SELECT * FROM tbl WHERE ".$tmp1.$tmp2.$tmp3.$tmp4;
?>

А условия $tmp1 ... $tmp12 формируйте в зависимости от того, указан параметр в HTML-форме или нет.
<?php
  
if(!empty($_POST['param'])) $tmp1 "t >".$_POST['param'];
  else 
$tmp1 "";
?>

В общем идея состоит в динамическом формировании WHERE-условия - тогда каждый элемент можно будет обработать независимо.

   
 
 автор: moonfox   (09.09.2005 в 00:36)   письмо автору
 
   для: cheops   (05.09.2005 в 01:21)
 

спасибо!
можно уточнее что вы имели в виду кодом
$tmp1 = "t >".$_POST['param'];

   
 
 автор: cheops   (09.09.2005 в 01:53)   письмо автору
 
   для: moonfox   (09.09.2005 в 00:36)
 

А ну так как ни названия полей, ни условия поиска не определены - я ввёл произвольное поле t и осуществил операцию поиска на основании знака больше >, т.е. допустим все записи для которых сумма в поле t превышает значение переданное в параметре $_POST['param'].

   
 
 автор: elenaki   (09.09.2005 в 13:05)   письмо автору
 
   для: cheops   (09.09.2005 в 01:53)
 

не забывайте после формирования первого условия ко всем последующим прибавлять AND, а то будет ошибка MySQL. если условий больше одного, надо в каждом последующем проверять, не равно ли предыдущее условие пустому месту, если не равно, то добавить AND. примерно так:


if (isset($model) && $model > 0)     $cond = "where model = ".$model;
if (!isset($model) || $model == -1 || $model == 0)     $cond = "";

if (isset($size1) && isset($size2) && $size1 > 0  && $size1 <= $size2) {
     if ($cond != "") $cond .= " and (size >= ".$size1." and size <= ".$size2.")";
     else             $cond = "where (size >= ".$size1." and size <= ".$size2.")";
 }
 
if (isset($age) && $age > 0 && $age != date("Y")) {
    if ($cond != "") $cond .= " and age >= ".$age;
    else              $cond = " where age >= ".$age;
    }
if (isset ($age) && $age == date("Y")) {
    if ($cond != "") $cond .= " and age = ".$age;
    else              $cond .= " where age = ".$age;
}

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования