Поиск нескольких полей таблицы с одной строкой, разбитой на части (MySQL) - PullRequest
1 голос
/ 10 мая 2011

У меня есть простая функция поиска, которая будет искать в таблице попадания.По сути, единственным недостатком этого поиска является то, что он пытается точно соответствовать строке.Я хочу, чтобы он взял строку «большая красная птица» и провёл поиск «большой», «красный» и «птица» отдельно по столу.вот мой поисковый запрос ...

$result = mysql_query("SELECT * FROM files
         WHERE (tags LIKE '%$search_ar%' OR
         name LIKE '%$search_ar%' OR
         company LIKE '%$search_ar%' OR
         brand LIKE '%$search_ar%')
         $str_thera $str_global $str_branded $str_medium $str_files");

есть идеи?спасибо

Редактировать ОК, вот мой обновленный запрос, но он ничего не возвращает.

$result = mysql_query("SELECT * FROM files
           WHERE MATCH(tags, name, company, brand)
           AGAINST ('$seach_ar' IN boolean MODE)"); 

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Полнотекстовый поиск действительно поможет, если у вас есть много данных для поиска.Хорошая ссылка для полного текста может быть найдена здесь: http://forge.mysql.com/w/images/c/c5/Fulltext.pdf

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


Если вы хотите продолжить использовать метод LIKE, вы можете.Вам просто нужно отделить слова (explode) и объединить их в запросе sql, используя AND:

...(tags LIKE '%$search_ar[0]%' AND tags LIKE '%$search_ar[1]%') OR ....

Подобным образом.Этот метод может быть слишком сложным, особенно если, скажем, вы хотите вернуть совпадения, в которых есть любое из слов, а не все.Так что да, потребуется некоторая настройка, чтобы сделать и автоматизировать, но это возможно.

1 голос
/ 10 мая 2011

Если по какой-либо причине вы не можете использовать полнотекстовый поиск (хорошая идея, Ник и Брэд, но поддерживает только MyISAM, и, насколько я слышал, это не так уж и хорошо), это не так уж сложноувеличьте базовый поиск с помощью explode() и implode():

$search_arr = explode(' ',$search_str);
$search_str = implode('%',$search_arr);
//query where fields like $search_arr

или:

$search_arr = explode(' ', $search_str);
   $sql = 'select * from files where ';
   foreach($search_arr = $term){
   $sql .= "tags like '%{$term}%' or " //fill in rest of fields
}

Примечание: если вы планируете расширять поиск и не можете использоватьПолнотекстовый поиск MySQL, я рекомендую проверить один из поисковых серверов, таких как Solr или Lucene.

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