Сегодня я покажу вам пример того, как можно сделать поиск по сайту
Если вы делаете что то вроде
то вроде как работает, но не совсем корректно
Например мы захотели найти Холодильник STINOL
а у нас товар забит в базе как Холодильник однокамерный STINOL то ни чего не найдет
столкнувшись с этой проблемой, я написал такую функцию
$i=0;
while (!empty($result[$i]))
{
if ($i>0) {$tmp.= " AND ";}
$tmp.="( `name` LIKE '%".$result[$i]."%')";
$i++;
}
return $tmp;
}
функция делит наш запрос по пробелам и выдает в результате что то вроде
(`name` like '%холодильник%') AND (`name` like '%STINOL%')
теперь нам остается подставить в строку запроса searchproc ($searchstring) и у нас будет почти хороший поисковик по товарам в каталоге
PS: Данная функция может служить примером, но не стоит её слепо копировать и использовать в своих скриптах, если вписать в строку поиска что то вроде
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
то у нас получается достаточно длинный запрос, что может вызвать ошибку, нужно или обрезать входные данные или делать ограничение на количество проходов цикла в функции
Если вы делаете что то вроде
SELECT * FROM `products` WHERE `name` like '%холодильник%';
то вроде как работает, но не совсем корректно
Например мы захотели найти Холодильник STINOL
а у нас товар забит в базе как Холодильник однокамерный STINOL то ни чего не найдет
столкнувшись с этой проблемой, я написал такую функцию
function searchproc ($str)
{
$tmp="";
{
$tmp="";
$str=trim($str);
$result = preg_split("/[\s]+/", $str);$i=0;
while (!empty($result[$i]))
{
if ($i>0) {$tmp.= " AND ";}
$tmp.="( `name` LIKE '%".$result[$i]."%')";
$i++;
}
return $tmp;
}
функция делит наш запрос по пробелам и выдает в результате что то вроде
(`name` like '%холодильник%') AND (`name` like '%STINOL%')
теперь нам остается подставить в строку запроса searchproc ($searchstring) и у нас будет почти хороший поисковик по товарам в каталоге
PS: Данная функция может служить примером, но не стоит её слепо копировать и использовать в своих скриптах, если вписать в строку поиска что то вроде
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
то у нас получается достаточно длинный запрос, что может вызвать ошибку, нужно или обрезать входные данные или делать ограничение на количество проходов цикла в функции
Комментариев нет:
Отправить комментарий