2015-11-14 4 views
1
SELECT * FROM Restaurants WHERE Name LIKE '%{$_GET["searchval"]}%' 

Приведенный выше код вернет все записи в таблице ресторанов, где поле имени содержит searchval.Соответствие mySQL любым словом в строке

Например, если searchval был «Example Entry», и в базе данных была запись с именем «Example Entry Number Five», эта запись будет отображаться. Но, если запись была «Пример номер пять», она не будет отображаться.

Как я могу сделать так, что если запись в базе данных содержит какое-либо слово в строке, она будет отображаться. Такие, что «Пример ввода» будет отображаться, если запись имела «Пример» или «Ввод» в нем.

+2

Разделите свой searchval на слова и добавьте предложение LIKE для каждого имени WHERE, такого как «% word1%» или имя типа «% word2%» и т. Д. Также вы можете посмотреть полнотекстовый поиск – Juan

+0

@Juan, но как можно которые выполняются программно и динамически на основе того, что вводит конечный пользователь? – TheDmOfJoes

+0

Вы ищете [полнотекстовый поиск] (http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html) –

ответ

0

Лучшее решение - это текстовые индексы. Однако вы можете делать то, что хотите, используя регулярные выражения.

Предполагая, что слова отделены друг от друга только одним словом, вы можете сделать:

where name rlike replace({$_GET["searchval"]}, ' ', '|') 

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

+0

Спасибо! Я использовал PHP для замены пробелов в строке, возвращая «Пример | Ввод», необходимый для rlike. Я также дезинформировал материалы для тех, кто был встревожен. – TheDmOfJoes

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

  • Нет связанных вопросов^_^