SQL выбрать запрос нескольких неполных слов - PullRequest
0 голосов
/ 09 марта 2012

нужна помощь по моей проблеме ...

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

пример:

product_name:

white sugar big
brown sugar big
white sugar small
brown sugar small

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

select * from products where prod_name like '%".$pname."%' 

примечание: $ pname является переменным php ...

поэтому я попытался запросить слово "whi"

тогда результат:

white sugar big
white sugar small

Теперь моя проблема в том, что я хочу сделать свой поиск более гибким, если я буду искать слово "whi bi"

результат будет "

white sugar big....

Спасибо за продвижение =)

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Просто замените каждый пробел на % в переменной php перед построением запроса.

0 голосов
/ 09 марта 2012

Простой ответ аналогичен тому, который был опубликован с использованием «% xx% yyy% zzz%» с ключевыми словами LIKE. Если вы ожидаете сложного поиска, вы можете использовать REGEXP:

select * from products where prod_name REGEXP 'whi[.]*bi[.]*'

Тогда ваш PHP-код должен быть подготовлен:

$keywords = "whi bi"; // whatever terms
$search = str_replace(' ','[.]*',$keywords)."[.]*";
$sql = "select * from products where prod_name REGEXP '".$search."'";
0 голосов
/ 09 марта 2012

Возможно, вы захотите попробовать полнотекстовый поиск в MYSQL, который автоматически скомпилирует поиск по оценкам:

См. http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

select * from products where  MATCH (prod_name) AGAINST ('whi bi')

Кроме того, вы можете взорвать слово и построить несколько запросов:

$searchTerms = explode(' ',$pname);
$term='%'.str_replace(' ','%',$pname).'%';
$sql = "select * from products where prod_name like '$term'";
0 голосов
/ 09 марта 2012

Заменить пробелы с поискового запроса на % как $term = str_replace(" ", "%", $term) затем выполните запрос БД.

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