Фильтрация данных по нескольким полям

e_Katerina

Новичок
Как правильно написать запрос для фильтрации данных, делаю так:
PHP:
 if (!empty($name_cartridge)){
$filtr.="name_cartridge like = '$name_cartridge%'";}

if (!empty($condition)){
     if (!empty($filtr)){
         $add=' and ';
     } else
     {$add='';}
     $filtr.=$add;
$filtr.="condition like = '$condition%'";  
}
if (!empty($department)){
     if (!empty($filtr)){
         $add=' and ';
     } else {$add='';}
     $filtr.=$add;
$filtr.="department like = '$department%'";  
}
if (!empty($type)){
     if (!empty($filtr)){
         $add=' and ';
     } else {$add='';}
     $filtr.=$add;
$filtr.="type like ='$type%'";  
}

$filtrs="SELECT * FROM log WHERE ";
if (!empty($filtr)) {
  
     $filtrs.=$filtr;
     $res=mysql_query($filtrs);
}
else {echo 'пустые поля';};
var_dump($res);
var_dump($filtrs);
Если заполнить все поля то запрос получается такой:
PHP:
"SELECT * FROM log WHERE name_cartridge like = 'HP%' and condition like = 'заправленный%' and department like = '17%' and type like =' картридж %'"
запрос возвращает false
не могу понять для чего % и как правильно его использовать ?
 
Последнее редактирование:

Kotofey

FloodMaster.
"add" ??
"like = " ???
не могу понять для чего % и как правильно его использовать
представил твои мысли во использования REGEXP :D
Google -> SQL для чайников.
 
Последнее редактирование:

just_guest

Новичок
%- принимает любое значение в твоём случае выбирает все строки начинающиеся с var и с любым окончанием
http://www.mysql.ru/docs/man/Pattern_matching.html
но проблема мб в бд или в этом > ' картридж %' > пробел в начале точно нужен?
 

Kotofey

FloodMaster.
смотрю add на and заменил, молодец, просто, тупо убери "=" после LIKE
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@e_Katerina, берем книгу по mysql и читаем, потом возвращаемся назад. И не дай бог тебе перепутать последовательность действий и вернуться до прочтения. Твои вопросы лишены всякого смысла.
 

e_Katerina

Новичок
PHP:
// получаем данные с формы
$name_cartridge=$_POST['name_cartridge'];
$daten=$_POST['daten'];
$datee=$_POST['datee'];
$condition=$_POST['condition'];
$department=$_POST['department'];
$type=$_POST['type'];
$count=$_POST['count'];


// проверка на пустые значения
$filtr='';
if (!empty($name_cartridge)){
$filtr.="`name_cartridge` LIKE  '$name_cartridge%' " ;}
if ((!empty($daten)) and (!empty($datee))){
     if (!empty($filtr)){
         $add=" and ";
     } else
     {$add='';}
$filtr.=$add;
$filtr.="date BETWEEN '$daten' and '$datee'" ;}
if (!empty($condition)){
     if (!empty($filtr)){
         $add=" and ";
     } else {$add='';}
     $filtr.=$add;
$filtr.="`condition` =  '$condition'";    
}
if (!empty($department)){
     if (!empty($filtr)){
         $add=" and ";
     } else {$add='';}
     $filtr.=$add;
$filtr.="department='$department'";    
}
if (!empty($type)){
     if (!empty($filtr)){
         $add=" and ";
     } else {$add='';}
     $filtr.=$add;
$filtr.="type='$type'";    
}

if (!empty($filtr)) {
     $filtrs="SELECT * FROM log WHERE ";
     $filtrs.=$filtr;
     include ('conect.php');
     $res=mysql_query($filtrs);
      var_dump($res);
}
else {echo '<h1>пустые поля</h1>';
};
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@e_Katerina, а что будет, если у вас окажется, что в массиве $_POST не будет поля name_cartridge (или любого другого?)
 

Kotofey

FloodMaster.
или будет вовсе не то что вы хотите, а еще один sql-запрос?
советую Вам таки закончить чтение книги по php
 

e_Katerina

Новичок
написано же условие для проверки пустого поля и брать его в качестве условия или нет
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@e_Katerina, у тебя ошибка будет, notice, надо проверять данные в тот момент, когда ты их получаешь
 

c0dex

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

artoodetoo

великий и ужасный
нормально когда на тестовом сервере вывод предупреждений включен, а на рабочем выключен. и на рабочий выкладывать код, только после истребления таких нотисов.
 

Kotofey

FloodMaster.
нормально когда на тестовом сервере вывод предупреждений включен, а на рабочем выключен. и на рабочий выкладывать код, только после истребления таких нотисов.
А если на продакшене не хватает каких-то настроек? Нормально отлавливать и notice тоже и делать грамотный обработчик как для тестового так и продакшн сервака.
 
Сверху