Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2013, 15:55   #1
soctellad
 
Регистрация: 28.08.2013
Сообщений: 7
Злость Поиск по нескольким полям

Подскажите, хочу реализовать запрос поиска по нескольким полям написал пока это
$result = mysql_query("SELECT * FROM re_user WHERE user_id='$user_id' or fio like '%$fio%' or email like '%$email%')",$db);

либо такое же только вместо OR писал AND
Этот запрос не подходит для меня т.к. иногда поиск происходит по нескольким полям или по одному
Опишите пожалуйста максимально подробно, т.к новичок в этом деле
soctellad вне форума Ответить с цитированием
Старый 28.08.2013, 16:03   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

составляйте запрос динамически, в зависимости от алгоритма
например общая часть запроса может быть такой
Код:
$q = "SELECT * FROM re_user WHERE ";
... затем в зависимости от условий
Код:
if () {$q .="user_id='$user_id' ";}
...
if () {$q .=" or fio like '%$fio%'";}
итд
Код:
$result = mysql_query($q);
ADSoft вне форума Ответить с цитированием
Старый 02.09.2013, 02:27   #3
soctellad
 
Регистрация: 28.08.2013
Сообщений: 7
По умолчанию

Код:
$result = mysql_query("SELECT * FROM re_user WHERE tariff_id='$tariff_id'",$db);
IF ($USER_ID='') {$result .='AND USER_ID="$USER_ID"'; }
пробовал еще так все равно не помогает, работает только поле tariff_id а если добавить в поле USER_ID, то ничего не выводит
soctellad вне форума Ответить с цитированием
Старый 02.09.2013, 02:34   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

$result - это уже РЕЗУЛЬТАТ запроса. Зачем Вы к данным ещё пытаетесь строчку с условием добавить?!
Вам же выше показали, формируете сначала строку запроса с необходимыми условиями, а потом уже выполняете запрос!

примерно так:
Код:
$q = "SELECT * FROM re_user WHERE tariff_id='$tariff_id'";
IF ($USER_ID!='') {$q .='  AND USER_ID="$USER_ID"'; }

$result = mysql_query($q, $db);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2013, 14:37   #5
soctellad
 
Регистрация: 28.08.2013
Сообщений: 7
По умолчанию

Сделал вот так
Код:
$q = "SELECT * FROM re_user WHERE tariff_id='$tariff_id'";
IF ($USER_ID!='') {$q .=' AND USER_ID="$USER_ID"'; }

$result = mysql_query($q, $db);


$row = mysql_fetch_array($result);
Все равно работает только поле tariff_id
И код формы следующий
Код:
<table border='solid'>
<form name='form2' method='post' action='search.php'>
<tr>
<td> ID
<input type='text' maxlength='3' name='user_id'  size='2' value=''>
</td>
<td> Имя
<input type='text' maxlength='15' name='fio' size='10' value=''>
</td>
<td> E-mail
<input type='text' maxlength='25' name='email' size='20' value=''>
</td>
<td> 
<select name="tariff_id" size ='1'>
<option value='1'>Тариф начальный</option>
<option value='2'>Тариф КРДМ</option>
</td>
<td> <input type='submit' value='Найти'>
</td>

</tr>
</form>
</table>

Последний раз редактировалось soctellad; 02.09.2013 в 14:45. Причина: добавление
soctellad вне форума Ответить с цитированием
Старый 02.09.2013, 14:47   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

потому что надо изучить php, а не бездумно подставлять....
в частности - работа со строками
Код:
IF ($USER_ID!='') {$q .=' AND USER_ID='.$USER_ID; }
как то так

ибо " ' != ' "
если все было бы в двойных кафычках - то можно переменную просто туда включать, если одиночные - нельзя
а чтоб таких вопросов не возникало - перед самим запросом выводите на экран запрос $q .... чтоб видеть что там
ADSoft вне форума Ответить с цитированием
Старый 02.09.2013, 15:08   #7
soctellad
 
Регистрация: 28.08.2013
Сообщений: 7
По умолчанию

Пробовал
Код:
IF ($USER_ID!='') {$q .=' AND USER_ID='.$USER_ID; }
При выводе $q пишет запрос без добавления, например
Код:
SELECT * FROM re_user WHERE tariff_id='1'
soctellad вне форума Ответить с цитированием
Старый 02.09.2013, 15:28   #8
soctellad
 
Регистрация: 28.08.2013
Сообщений: 7
По умолчанию

Найдено решение
Код:
$fields = array(
  #запоняем поля field => variable name
  'user_id' => 'user_id',
  'fio' => 'fio',
  'email'  => 'email',
  'tariff_id'  => 'tariff_id'
);
$query = array();
foreach( $fields as $field => $variable ) {
  if (!empty($$variable)) $query[] = "`$field` like '%". mysql_real_escape_string($$variable) ."%'";
}
 
try{
 
  if (sizeof($query ) == 0) {
   throw new exception('не заполенно не одно поле');
  }
  else if(sizeof($query ) == 1){
    $where = current($query);
  }
  else {
    $where = implode(' and ' , $query );
  }
  
  $query = 'SELECT * FROM re_user WHERE ' . $where;
  #здесь код если ошибок нет - работаем с запросом $query
}
catch(exception $e){
  #здесь код вывода ошибок
}  

$result = mysql_query($query, $db);

$row = mysql_fetch_array($result);
soctellad вне форума Ответить с цитированием
Старый 02.09.2013, 15:30   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так пробовали?
Код:
IF ($user_id!='') {$q .=' AND USER_ID='.$user_id; }

UPDATE
Цитата:
Найдено решение
я свой пост писал до того, как Вы это написали...
ну, так, конечно, лучше!

Последний раз редактировалось Serge_Bliznykov; 02.09.2013 в 15:33.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация по нескольким полям Neksion Помощь студентам 12 07.06.2013 14:25
Поиск Locate по нескольким полям athleet Общие вопросы Delphi 5 22.05.2011 15:34
Реализация сортировки по нескольким полям mrMoRiC Общие вопросы C/C++ 1 23.02.2009 18:49
Фильтрация по нескольким полям! Askat БД в Delphi 1 14.06.2007 06:44