Интернет-торговля для чайников на PHP

Никита Кислицин

Xakep, номер #055, стр. 055-072-4


#если какое-то слово начинается с символа кавычки

if($quoted==1) {$Lexeme[$LexNum].=ereg_replace("\"","",$search[$i])." ";}

# если мы находимся между кавычек, то приклеиваем слово

# за слово в одну лексему

else {

$Lexeme[$LexNum++]=$search[$i];

#если вне цитаты, то помещаем каждое слово отдельной лексемой

}

if(ereg("\"$", $search[$i])) {$quoted=0; $Lexeme[$LexNum]=chop($Lexeme[$LexNum]); $LexNum++;}

#Если обнаружили закрывающую кавычку, обрубаем последний символ в лексеме (пробел)

}

for ($i=0; $i<=count($Lexeme)-1; $i++) #Цикл по каждой лексеме

{

for ($j=0; $j<=count($fields)-1; $j++) #Цикл по каждому полю

{

ereg_replace(" $","",$Lexeme[$i]);

if(ereg("^\-",$Lexeme[$i])) #если лексема начинается с квантора "-"

{

$sql.= $fields[$j]." NOT LIKE '%". substr($Lexeme[$i],1)."%'"; # Приклеиваем в запрос условие "NOT LIKE %лексема_без_квантора%". Поясню, % - стандартный символ подстановки в языке SQL.

if ($j<count($fields)-1) { $sql.=" AND "; }

# Составляем такие условия для каждого из полей, конъюнктивно объединяя высказывания

}

else #Если слово не имеет кванторов, либо он "+"

{

$Lexeme[$i]=ereg_replace("^\+","",$Lexeme[$i]); #Вырезаем квантор

$sql.=$fields[$j]." LIKE '%$Lexeme[$i]%'"; #Добавляем в запрос новое условие "LIKE %лексема"

if ($j<count($fields)-1) { $sql.=" OR "; } # Составляем такие условия для каждого из полей, дизъюнктивно объединяя высказывания

}

}

if($i<count($Lexeme)-1) #если мы еще внутри массива с лексемами

{

$sql.=") AND (";

} else {$sql.=")";} #если уже весь прошли, на последнем, добавляя условие, закрываем скобку.

}

return($sql); #Возвращаем строку с запросом

}

Назад на стр. 055-072-3  Содержание