Используйте REGEXP в MySQL, чтобы сопоставить ключевые слова для поисковой системы в случайном порядке - PullRequest
4 голосов
/ 18 апреля 2011

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

Например, в моей базе данных есть следующие строки в таблице:

id   title
1    IM2 - Article 3 Funky Business
2    IM2 - Article 4 There's no Business That's not Show Business
3    IM2 - There's no Business That's not Show Business
4    CO4 - Life's a business

Когда пользователь ищет «IM Article Business», будет выполнен следующий запрос (пробелы заменяются на «(. *)» С использованием str_replace):

SELECT * FROM mytable WHERE title REGEXP 'IM(.*)Article(.*)Business'

Это вернет первые 2 строки.

Теперь я хочу, чтобы он показывал те же результаты, когда пользователь использует те же слова, но в другом порядке, например: «Статья бизнес-чата». Результаты ДОЛЖНЫ содержать все введенные слова, не должен иметь значения только порядок их ввода.

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

Спасибо
Pascal

1 Ответ

4 голосов
/ 18 апреля 2011

Это не то, что регулярные выражения хороши в. К счастью, в SQL это хорошо получается. (Я не буду использовать ключевое слово regexp в mysql, о котором я даже не подозревала, а вместо этого использую сопоставление глобуса «%» в стандарте SQL.)

select * from mytable where title like '%IM%' and title like '%Article%' and title like '%Business%'

Теперь title должен содержать все три строки, но вы не указали порядок. Именно то, что вы хотите.

...