MYSQL сложный LIKE

Рейтинг: 0Ответов: 1Опубликовано: 19.11.2014

Привет, делаю поиск на mysql.
Пользователь ввел поисковый запрос 'John Smith', нужно получить строки, где подстрока запроса встречается в различных комбинациях

1)

John smith loren ipsum ...

...Loren ipsum john smith.

...Loren john smith ipsum....

2)

Loren john ipsum smith amet

Пытаюсь составить запрос. С пунктом 2 все понятно:

SELECT * 
    FROM  `person` 
    WHERE memo LIKE  '% John % Smith %'

С пунктом 1 нет.
Запрос:

SELECT * 
FROM  `person` 
WHERE memo LIKE  '%John%Smith%'

вернет нам в том числе и такие строки:

Loren eljohnathan ipsum lesmithel amet

А мне это не нужно, нужны строки, как указаны в пункте 1.

Я так понимаю, нужно использовать regexp?
Спасибо.

Ответы

▲ 1Принят

В вашем случае лучше использовать полнотекстовый поиск в MySQL.
В двух словах не расскажешь, есть целая статья по этому вопросу.
Сам одно время делал "умный" поиск, но я тогда еще обрезал каждое слово на 1-2 символа с конца, чтобы поиск лучше понимал склонения разных слов.
Подробнее почитайте вот тут: http://www.mysql.ru/docs/man/Fulltext_Search.html