два слова и пробелы не работают в запросе MYSQL с использованием LIKE - PullRequest
0 голосов
/ 06 января 2011

Я делаю поисковик для моего сайта, и это прекрасно работает с одним словом querys

 $consulta = mysql_query("SELECT * FROM recetas WHERE (titulo LIKE '%$busqueda%' OR intro LIKE '%$busqueda%' OR extra LIKE '%$busqueda%') ORDER BY id DESC");

Но если я наберу "два слова", это не даст мне результат, $busqueda это результатиз <input/>, переданного через $_POST['TERM']

есть идеи, что мне не хватает?

решено

мне не хватало, чтобы закодировать переменную в URI ... упсхаха СПАСИБО!

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Подумайте, как будет выглядеть ваш запрос в конце:

Select ... where '%two words%. ...

Если вы хотите искать подобные слова, вам придется помассировать данные, чтобы они выглядели как:

 ... Like '%two%words%'
 ... Like '%two%' or like '%words%'

в зависимости от ваших требований к поиску

2 голосов
/ 06 января 2011

Если два слова не смежны в тексте, оператор LIKE не найдет их. Вы можете использовать полнотекстовый поиск .

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

WHERE (titulo LIKE '%$word1%' OR intro LIKE '%$word1%' OR extra LIKE '%$word1%' OR
       titulo LIKE '%$word2%' OR intro LIKE '%$word2%' OR extra LIKE '%$word2%' )

Это предполагает, что вы хотите найти совпадение с любым словом. Если оба должны совпадать, то что-то вроде этого:

WHERE (titulo LIKE '%$word1%' AND titulo like '%$word2%' OR
       intro LIKE '%$word1%' AND intro LIKE '%$word2%'  OR 
       extra LIKE '%$word1%' AND extra LIKE '%$word2%' )

И еще одна вещь. Было бы лучше использовать параметризованные запросы, чтобы избежать SQL-инъекции .

0 голосов
/ 21 марта 2011

где (МАТЧ (titulo, intro, extra) ПРОТИВ ('word1 word2' в БУЛЕВОМ РЕЖИМЕ))

...