Я создаю функцию поиска для каталога товаров.
Вот код ввода:
<form name="search" method="post" action="'.$PHP_SELF.'">
<div>
Search for: <input type="text" name="find" />
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</div>
</form>
Вот запрос, который запрашивает у базы данных Mysql совпадение:
SELECT * FROM `products` WHERE upper(`desc`) LIKE'%$find%'
Все это прекрасно работает, когда пользователь ищет строку из одного слова.
Проблема здесь в том, что когда пользователь ищет строку из двух слов, совпадение не найдено, поскольку иногда эти строки относятся к отдельным функциям.
Примером этого может служить каталог продуктов, содержащий информацию о различных конфетах:
Вы получаете батончики с конфетами, коробки с конфетами, пакеты с конфетами и т.д ...
Теперь, хотя некоторые из описаний, содержащихся в поле desc
, содержат слова «шоколад и батончик», некоторые содержат варианты, например «фирменные батончики по 120 г шоколада».
Это вызывает проблему в приведенном выше коде, потому что если пользователь ищет «плитку шоколада», если описание в поле desc
явно не содержит эту вариацию, совпадения возвращаться не будут.
Я бы хотел, чтобы при поиске «плитки шоколада» возвращалось любое совпадение, содержащее варианты «шоколад» и «плитка».
Есть ли у кого-нибудь какие-либо сведения о том, как я буду выполнять эту задачу?
Возможно превратить $find
в массив и сделать "" разделителем?