Запрос Sql - если заявление - PullRequest
       28

Запрос Sql - если заявление

0 голосов
/ 15 декабря 2009

Я пытаюсь сделать «расширенное» поле поиска для пользователей. (у пользователей есть 5-8 полей для короткого списка поиска ..)

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

Это мой оригинальный запрос, но с этим я получил всю строку из таблицы ..

$query = "select * from MYTABLE where FIELD1 LIKE '%$sample1%' OR FIELD2 LIKE '%$sample2%' OR FIELD3 LIKE '%$sample3%' OR FIELD4 LIKE '%$sample4%' order by name"; 

Так что я думаю, что мне нужно использовать оператор IF в запросе, но я не знаю как, я все время получаю сообщение об ошибке. И еще одна вещь: если этот пользователь заполняет «sample4», то он должен заполнить «sample1». Как я могу это проверить?

Спасибо за вашу помощь.

Ответы [ 5 ]

2 голосов
/ 15 декабря 2009

Вы также можете использовать массив для этого, он будет более организованным таким образом. Для каждого условия where вы сохраняете их в одном элементе массива и, наконец, присоединяете их при создании SQL.

<?

$fields = array('field1', 'field2', 'field3');
// Changed this to 0, so it won't return all rows
// but also the default array element prevent the statement to fail when 
// no search is being specified at all
$wheres = array(0);
foreach ($fields as $fieldname) {
  // Get user input
  $search = $_GET[$fieldname];
  // add condition to wheres if not empty
  if (!empty($search)) {
    $wheres[] = $fieldname . ' LIKE "%' . mysql_real_escape_string($search)  . '%"';
  }
}

// Join the wheres conditions using OR, (or AND)
$query = 'select * from MYTABLE where' . join(' OR ', $wheres);

?>
1 голос
/ 15 декабря 2009

Вы должны рассмотреть возможность реализации механизма «полнотекстового поиска».

MySQL имеет функцию поиска «FULLTEXT» - вы можете начать изучать ее здесь : См. Также эту статью: Разработка поисковой системы сайта с PHP и MySQL

0 голосов
/ 15 декабря 2009

Вы можете попробовать использовать оператор "is not null" следующим образом:

select * 
from mytable
where 
(field1 is not null and field1 like '%test%') or 
(field2 is not null and field2 like '%test%') or 
(field3 is not null and field3 like '%test%') or
(field4 is not null and field4 like '%test%')
order by name

См. Также Обработка значений MySQL NULL

0 голосов
/ 15 декабря 2009

Возможно, вам понадобится решение для полнотекстового поиска, основанное на php - тогда посмотрите на Zend_Search_Lucene, который представляет собой порт PHP Apache Lucene Презентации Zend_Search_Lucene можно найти здесь:

0 голосов
/ 15 декабря 2009

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

Если вы предпочитаете следовать своему решению, вы можете использовать конструкцию SQL

CASE WHEN

Пожалуйста, смотрите это для MS SQL и это для MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...