2014-10-07 4 views
2

У меня есть запрос mysql следующим образом.MySQL wildcard Подобный запрос с несколькими словами

$query="SELECT name,activity FROM appid 
where result > 5 AND name LIKE :term ORDER BY name ASC LIMIT 0,40"; 

$result = $pdo->prepare($query); 

$result->bindvalue(':term','%'.$_GET["q"].'%',PDO::PARAM_STR); 
$result->execute(); 

Что я хочу сделать это.

У меня есть и запись, как это, что я хочу найти

«Новости & Погода»

Однако, когда я типа

«Новости погоды»

это, конечно, не найти Это. Как я могу набрать это и получить эту запись?

+1

Создание массива слов расщепления на пространстве и имеет 'ИЛИ LIKE' для каждого значения в массиве. –

+0

Упрощение: используйте регулярные выражения (см. Ниже) – Barranka

ответ

2

Regular expressions может сделать трюк:

select * 
from appid 
where name rlike 'news|weather' -- Matches 'news' or 'weather' 

Другой пример:

select * 
from appid 
where name rlike 'news.*weather' -- Matches 'news' and 'wether' 
           -- with any characters in-between or none at all 
           -- (ordered) 

Просто еще один:

select * 
from appid 
where name rlike '^news.{1,}weather$' -- Matches any text that starts with 'news' 
             -- and has at least one character before 
             -- ending with 'weather' 

Регулярные espressions могут быть использованы для создания очень сложных фильтров по тексту поля. Прочтите ссылку выше для получения дополнительной информации.


Если вы можете добавить полнотекстовый индекс в таблицу, Full-text search может быть лучше пойти с этим. В частности, boolean Full-Text search:

select * 
from appid 
where match(name) against (+news +weather) 
+0

Это выглядит хорошо, но как реализовать это в моем запросе, который использует $ _GET из поиска пользователя? – Bignadad

0

Я считаю единственно возможным способом является по коде:

Варианта A: Заменить пробела в параметре запроса с «%» в коде, но это, конечно, будет сделать несколько слов заказали

варианта B: Разделите свой параметр на пространствах и динамически создайте свой запрос с большим количеством LIKE по мере необходимости, добавив дополнительные параметры «: termN» для каждого из них.

+0

Я рекомендую вам прочитать [регулярные выражения в MySQL] (http://dev.mysql.com/doc/refman/5.5/en/regexp.html) для лучшего варианта – Barranka

+0

О да, я забыл, что это есть; Я действительно не использую их в данных, с которыми я регулярно работаю. – Uueerdo

+0

Я сказал точно так же, когда кто-то представил их мне ... и теперь я не могу уйти без них;) – Barranka

Смежные вопросы