Suchanfrage an Datebank

Xsdojo

Grünschnabel
Hallo ich habe volgendes Problem ich möchte eine Suchanfrage an eine MySQL Datenbank senden und zwar wie folgt.

wenn ich mehrere Keywords in eine Form eingebe:

Keyword1 Keyword2 Keyword3

Soll es kommplet über alle spalten in einer Tabelle suchen und alle Ergebnisse ausgeben in denen eines der 3 Keywords vorkommt.

also sagen wir ich gebe ein:

Autos Kaufen in Deutschland

in der Tabelle ist vorhanden:


id1: Sie können viele Autos haben aber nur ....
id2: Kaufen macht Spaß
id3: wenn ich etwas brauche dann



Dann soll es mir ausspucken

id1 und id2 weil da einmal Autos vorkommt und bei der 2ten kommt kaufen vor

wie kann ich sowas Realisieren.

ich hab biss jetzt nur

$query = "select * from tabelle where Text like '%Suchwort'";

aber die anfrage reicht mir nicht vorallem wenn einer mehrere Keywords hintereinander eingibt.


Vielen Dank im vorraus an alle die mir Helfen

PS: hab schon Google und alles Abgesucht ^^
 
Das problem ist viel mehr das ich ja ein formular habe und die suchbegrife nicht einzeln in Variablen deviniert sind. Aber schonmal ein Anfang jetzt sollte ich nur wissen wie ich mehrere wörter in mehrere Variablen umwandle hm und natürlich dann auch dementsprechend mehr OR im Query tag sind

Also ich muss jetzt eigentlich nur noch wissen wie man Mehrere Wörter in verschiedene Variablen aufteilt.

in der art das aus:

hallo ich bin ein satz


[wass kommt hier dazwischen]

$variable1 = "hallo";
$variable2 = "ich";
$variable3 = "bin";
$variable4 = "ein";
$variable5 = "satz";
 
Zuletzt bearbeitet:
Du brauchst die Wörter nicht erst in Variablen bringen... zimmere aus dem gesamten Suchbegriff mit regulären Ausdrücken den Query zusammen.

Hört sich kompliziert an... ist es aber nicht.

Du musst in der übergebenen Zeichenkette folgendes tun:
aufeinanderfolgende Zeichen, welche keine Leerzeichen sind, mit Quotes umschliessen, und das Prozentzeichen davor und dahinter setzen.
Code:
$str = preg_replace("@(\S+)@", "'%\\1%'", trim($_REQUEST['variable'])

dann musst du alle aufeinanderfolgenden Leerzeichen darin durch die Zeichenkette OR Text like ersetzen.

Code:
$str = preg_replace("@\s+@", ' OR Text like ', $str);

Das Ergebnis hängst du dann an diesen String ran:
Code:
SELECT * FROM tabelle WHERE Text LIKE
fertig ist dein Query... egal, wieviel Suchbegriffe übergeben wurden.
Komplett sähe das dann so aus:
Code:
$sql = 'SELECT * FROM tabelle WHERE Text LIKE '.preg_replace("@\s+@", ' OR Text like ', preg_replace("@(\S+)@", "'%\\1%'", trim($_REQUEST['variable'])));

Bevor du das Ganze tust, solltest du den kompletten Suchbegriff natürlich noch hinsichtlich Sicherheit und Performance bearbeiten.
 
Code:
<?
$suche = "Test suche";


$query = 'SELECT * FROM adwords WHERE adtext LIKE '.preg_replace("@\s+@", ' OR adtext like ', preg_replace("@(\S+)@", "'%\\1'", trim($_REQUEST['$suche'])));



$result = mysql_query($query);

while($row = mysql_fetch_array($result))
    {    
$adtext = $row["adtext"];
$adtitel = $row["adtitel"];
$adlink = $row["adlink"];
echo("<a href=\"$adlink\" ><strong>$adtitel</strong></a><br>$adtext<br><br>");
};

?>


Das kommt dabei raus:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /index.php on line 295



Irgendwas kann da noch nicht stimmen :(
 
Code:
trim($_REQUEST['$suche'])

entweder trim($_REQUEST['suche'])...wenn der String aus dem Formular kommt,
oder trim($suche).... wenn du die Variable willst, die du da zu stehen hast.
 
Habs jetzt danke für deine Hilfe war mein fehler hatte ein % zeichen vergessen :)
:p
 
Zuletzt bearbeitet:
Zurück