Intereting Posts

PHP / MySQL – включают множественные числа, но исключают особые

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

Например:

  • поиск «Хлебов» должен возвращать результаты с «хлебом» внутри него, но не «хлеб» или «читать».

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

Запрос, который я пробовал:

SELECT * FROM table WHERE (field LIKE '%breads%') AND (field NOT LIKE '%bread%') 

… которые явно не дали никаких результатов, хотя в нем есть записи с хлебом и хлебом.

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

Related of "PHP / MySQL – включают множественные числа, но исключают особые"

Поиск %breads% НИКОГДА не возвращал бы bread или не read , так как «s» является обязательным символом для матча. Поэтому просто исключите условие и:

 SELECT ... WHERE (field LIKE '%breads%') SELECT ... WHERE (field LIKE '%paperback book%'); 

Вы должны использовать FULL TEXT SEARCH .

Это решит вашу проблему с хлебом / чтением.

Я считаю, что использование подстановочных знаков здесь нецелесообразно. Допустим, вы используете '%read%' , теперь это также будет возвращать bread , breads т. Д., Поэтому я рекомендовал Full Text Search

С MySQL вы можете использовать REGEXP вместо того, что бы лучше контролировать ваш запрос …

 SELECT * FROM table WHERE field REGEXP '\s+read\s+' 

Это, по крайней мере, обеспечит соблюдение границ слов вокруг вашего запроса и даст вам гораздо лучший контроль над вашим соответствием – с недостатком производительности.