Suche mit AND, OR oder NOT

dr_Alex

Erfahrenes Mitglied
hallo,

ich möchte eine suche durch mysql machen. der benutzer soll die möglichkeit haben AND, OR oder NOT in das suchfeld einzutragen. und schon hier stecke ich fest.

so fängt es an:

PHP:
$find=str_replace('*', '%', trim($_POST['find']));
$find_words=explode(' ', trim(preg_replace('#\s+#', ' ', $find)));
for($i = 0; $i < count($find_words); $i++){
  $sql.=" AND (product_name LIKE '$find_words[$i])'";
}

also das ist jetzt ohne die trennung. hat jemand eine idee? ich brauche nur einen gedankenstoss.

danke vorraus
 
Hi dr_Alex!

bin das ganze jetzt durchgegangen und habe folgendes ausgetüfftelt.
Kann man sicher noch optimieren, aber es funktioniert.
Code:
$myString = "Wort1 Wort2 or Wort3 and Wort4 Wort5";

$find=str_replace('*', '%', $myString);
$find_words=explode(' ', $find);

$sql="";
$last_was_operator = 0;
$operator="";
for($i = 0; $i < count($find_words); $i++){
	$operator=" AND ";
	if ($last_was_operator == 0){
		if (strtoupper($find_words[$i]) == "OR" || strtoupper($find_words[$i]) == "ODER" ) { $sql.=" OR "; $last_was_operator = 1;}
		if (strtoupper($find_words[$i]) == "AND" || strtoupper($find_words[$i]) == "UND" ) { $sql.=" AND "; $last_was_operator = 1;}
	}
	if ($last_was_operator == 0) {
		$sql.= " AND (product_name LIKE '".$find_words[$i]."') ";
	}else{
		$sql.= " (product_name LIKE '".$find_words[$i]."') ";
		$last_was_operator = 0;
 	}
}

echo $sql;

Code teilt den String auf und nimmt als Default-Verknüpfung ein AND (also wenn die Suchwörter mit " " getrennt wurden).
Findet er eine "and, und, or, oder" nimmt er dies als logische Verknüpfung.
NOT habe ich jetzt nicht dabei, sollte aber leicht erweiterbar sein.

lg,
Daniel
 
Zurück