четверг, 6 января 2011 г.

Поиск по сайту PHP

 Сегодня я покажу вам пример того, как можно сделать поиск по сайту

Если вы делаете что то вроде

SELECT * FROM `products` WHERE  `name` like '%холодильник%';

то вроде как работает, но не совсем корректно

Например мы захотели найти Холодильник STINOL

а у нас товар забит в базе как Холодильник однокамерный STINOL то ни чего не найдет

столкнувшись с этой проблемой, я написал такую функцию


function searchproc ($str)
{
$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 
то у нас получается достаточно длинный запрос, что может вызвать ошибку, нужно или обрезать входные данные или делать ограничение на количество проходов цикла в функции