|
Интернет-торговля для чайников на 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); #Возвращаем строку с запросом } |