Suche mit mehreren Worten

markberg

Erfahrenes Mitglied
Hallo,
habe hier bereits gesucht nach "suchen", ich habe eine Suchabfrage, die allerdings nur mit einem Suchbegriff zum Erfolg führt!? Gibt man z. B. "Hund Beissen Tanzen" ein, so ist Ergebnis gleich Null. Wie ungefähr muss den eine Suche mit mehreren Worten aussehen, bin für einen heissen Tipp dankbar... vielen Dank im voraus :-)

PHP:
$sucheallgemein = $_POST["sucheallgemein"];			
$Verbindung = mysql_connect("xxx","xxx","xxx");
$query=("use DBxxx");					
$where = " `beschreibung` LIKE '%".$sucheallgemein."%' OR `locationname` LIKE '%".$sucheallgemein."%' ";
$SQLString = "SELECT locationname, beschreibung FROM DBxxx.tabelle WHERE ".$where." LIMIT $Ergebnis, 5";
$Ergebnis = mysql_query($SQLString, $Verbindung); //usw....
 
mmh,

zur Not mach doch noch ein "and" mit rein.

also a v b v c v (a ^ b )

Vielleicht hilft dir das weiter....
 
Ich habs bei mir so gelöst:

PHP:
$suchwort = strtolower($_GET["highlight"]);
$suchwort = trim($suchwort);
$suchwort = str_replace(" ","%",$suchwort);
$suchwort = "%".$suchwort."%"; 
$result = do_query("SELECT * FROM tabelle WHERE titel LIKE '$suchwort'...");
 
Erstmal vielen Dank,

@ soa:
aber wie und wo soll ich den ein AND einfügen!? Stehe wohl gerade auf dem Schlauch, aber ich bekomme eine Variable übergeben mit z. B. "Hund Katze".

@diggity:
Woher bekommst Du den das "Highlight" her? Oder diente das nur als Beispiel?
 
Das Highlight bekomme ich aus dem URL, wie ja wegen $_GET unschwer zu erkennen ist ;)
"Highlight" deswegen, weil das Suchwort ja dann hervorgehoben auch werden soll.
 
Auf folgende Weise baue ich mir solche Querys zusammen:
PHP:
$suchbegriff=trim($_GET['suchbegriff']);
$suchbegriffe=explode(" ",$suchbegriff);
$vergleiche=array();
foreach($suchbegriffe AS $s) {
    $se = mysql_real_escape_string(
        ((get_magic_quotes_gpc()==1)
            ?stripslashes($s):$s));
    $vergleiche[]="(`beschreibung` LIKE '%"
        .$se
        ."%' OR `locationname` LIKE '%"
        .$se
        ."%')";
}

//Nun zwei Alternativen:

//Alle Wörter müssen vorkommen:
$where = implode(" AND ",$vergleiche);

//Nur eines der Wörter muss vorkommen:
$where = implode(" OR ",$vergleiche);
Gruß hpvw
 
Ups, also blicke da zwar nicht ganz durch, aber habe es bei eingebaut, und siehe da: Fehler: may_real_escape_string() Zeile 173 und die wäre...

PHP:
$se = mysql_real_escape_string( 
        ((get_magic_quotes_gpc()==1) 
            ?stripslashes($s):$s));
 
markberg hat gesagt.:
Fehler: may_real_escape_string() Zeile 173
Bist Du Dir sicher, dass das die vollständige Fehlermeldung ist?
Es könnte auch nicht schaden, den Quellcode inklusive ein Paar Zeilen davor und danach zu zeigen. Die Funktion heißt übrigends [phpf]mysql_real_escape_string[/phpf] und nicht may_real_escape_string.

Gruß hpvw
 
Hallo!
Also ich weiß jetzt nicht 100% ob mein Script funktioniert da ich es leider nicht getestet habe, aber ich poste es hier ganz einfach mal. Falls etewas nicht stimmen sollte lasse ich mich gern eines Besseren belehren

PHP:
<?

echo "<form method='post'><input type='text' name='suchtxt'>";
echo "<input type='submit' value='suchen' name='suchen'></form>";

if($_POST['suchen']) {
$suchtext = $_POST['suchtxt'];
$suchtext = explode(" ", $suchtext);
$count = count($suchtext);
$tbname = 'tabelle';
for($i = 0; $i<$count; $i++) {
$sql = mysql_query("SELECT * ALL FROM $tbname WHERE inhalt = $suchtext[$i] OR headlinde = $suchtext[$i]");
$number = mysql_num_rows($sql);
if($number > 0) {
echo "Es wurden ".$number." Treffer erzielt...";
} else {
echo "Es wurden leider keine Treffer erzielt...";
}
}
}
?>
Grüße Andulus ;)
 
Zurück