Suchfunktion

So heut gibt's mal ein Kochrezept für eine Suchfunktion. Sollte eigentlich zu schaffen sein, man muss die Ausgabe der Suchergebnisse, sprich den Titel des Datenbankeintrages und den Text sowie den Link zum Suchergebniss natürlich an seine eigene Datenbank anpassen.

Suchen ist eigentlich sehr leicht. Die Syntax
mysql_query("SELECT * FROM tabelle WHERE spalte LIKE '%Suchbegriff%'");erledigt eigentlich alles. Der Rest sind bloß rumspielereien.

Wie sieht die Funktion aus?
Wir haben ein eingabe feld und die möglichkeit anzugeben, ob alle oder einzelne der Suchbegriffe gesucht werden sollen. Umzusetzen ist das ganz einfach, indem wir dem Radio alle den modus AND zuweisen und dem radio einzelne OR. Das füllen wir dann später in die query ein - fertig.

Wir tun nichts anderes, als das wir die Suchbegriffe einzeln in einen Array laden und diesen dann mittels while Schleife abarbeiten, in einen query ($reihe) schreiben und mit $modus (AND oder OR) wie zuvor mittels radio angegeben, verknüpfen.

Die Auflistung hier ist mal im GOOGLE-Stil: Oben die Überschrift, darunter 225 Zeichen aus dem Text indem das Suchwort vorkommt. Die Ausgabe der Suchergebnisse müsst ihr euren Gegebenheiten anpassen. Ich lese auf der HP wo ich das anwende die Datenbank immer mittels ID aus, also brauch ich jetzt immer nur ?id='.$ergebnis[id].' ranhängen. Sollte man sich angewöhnen so, macht das Leben mit PHP-Seiten extrem einfach ^^

Da noch der Code:

echo'
<form>
<input type="text" name="suchbegriff" value="'.$suchbegriff.'">
<input type="submit" value="suchen">
<br>
Soll <input type="radio" name="modus" value="AND" checked>alle <input type="radio" name="modus" value="OR">einen der Suchbegriffe enthalten
</form>
';

if($modus == ""){$modus = 'AND';}
$such_array = explode(' ',$suchbegriff);//Alle Wörter einzeln in einen Array lesen
$reihe = 'SELECT * FROM tabelle WHERE';
$suchbegriffe = count($such_array);//Anzahl der Suchbegriffe ermitteln
$zähler = 0;//Zähler auf 0 setzen (weil Array bei 0 beginnt)
while($zähler < $suchbegriffe)//wiederhole das folgende solange, bis der zähler eins kleiner ist als die anzahl der suchbegriffe
{
$reihe .= " text LIKE '%".$such_array[$zähler]."%'";
if($zähler < $suchbegriffe-1)//damit er nach dem letzten kein OR oder AND mehr einfügt
{
$reihe .= $modus;
}
$zähler++;
}
$reihe = mysql_query($reihe);//jetzt ne query mit dem Zusammengestellten
$sg = mysql_num_rows($reihe);//schaun wieviele treffer wir haben
if($sg == 0)//wenn 0 gibt es keine, also sagen wir:
{
$hauptfeld .= 'Keine Eintr&auml;ge mit den angegeben Suchkriterien gefunden';
}
else//ansonsten müss ma die Treffer auflisten
{
if($sg == 1){$sg = $sg.' Suchergebnis';}//ein bisschen rumspielen: wenn er nur 1 ergebniss hat soll er ergebnis hinschreiben, sonst würde 1 suchergebnisse stehen
else{$sg = $sg.' Suchergebnisse';}
echo'<h2>'.$sg.' in Tabelle</h2>';
while($ergebnisse = mysql_fetch_array($reihe))//jetzt list ma die ergebnisse auf
{
$text = substr($ergebnisse[text],0,225);//nehmen die ersten 225 zeichen in der der treffer ist
if(strlen($ergebnisse[text]) > 255){$text .= ' <a href="index.php?aktion=die_welt_darkover&eintrag='.$ergebnisse[id].'">...</a>';} //wenn der text länger ist machma gleich drei Punkte hin mit nem Link zur Ausgabeseite
echo'<a style="font-size: 15px" href="link_zur_seite.php?eintrag='.$ergebnisse[id].'">'.$ergebnisse[titel].'</a><br>'.$text.'<br><br>';
}
}


Tada! Das wars auch schon von mir. Bis zum nächsten Mal.

Kommentare

proggi
proggi am Freitag, 9. Juli 2004 um 07:40

Wäre schön, wenn du deinen Code zum suchen noch in eiune Funktion packen könntest. :) Würde ein wenig Zeit, beim verstehen des Codes sparen.

JayT
JayT am Samstag, 10. Juli 2004 um 17:50

[left]hmmm[/left][right]hmmmm[/right]

nomissimo
nomissimo am Donnerstag, 15. Juli 2004 um 02:11

nur wird vielleicht einigen nich klar sein dass man hier nur ne mysql tabelle durchsuchen kann...

jozy
jozy am Montag, 9. August 2004 um 09:50

wenn ich das richtig in erinnerung habe kann man mit diesem LIKE nur strings suchen, die mind. 3-4 zeichen haben...
<br>außerdem wäre da noch der nachteil, dass man mit dem suchbegriff "und" auch so sachen wie "kunden" , "undurchschaubar" und was nicht alles findet, oder?!
<br>(das kann zumindest ein nachteil werden bzw erzielt mitunter sehr ungenaue ergebnisse)

PBB-Owner
PBB-Owner am Samstag, 9. Oktober 2004 um 12:03

[b]Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/htdocs/v029108/such.php on line 37[/b]
<br>
<br>$reihe = mysql_query($reihe);//jetzt ne query mit dem Zusammengestellten
<br>$sg = mysql_num_rows($reihe);//schaun wieviele treffer wir haben
<br> if($sg == 0)//wenn 0 gibt es keine, also sagen wir:
<br> {
<br> $hauptfeld .= ´Keine Einträge mit den angegeben Suchkriterien gefunden´;
<br> }
<br> else//ansonsten müss ma die Treffer auflisten
<br> {
<br>
<br>wo kann da der fehler sein

Markus René Einicher
Markus René Einicher am Sonntag, 10. Oktober 2004 um 21:19

$reihe = mysql_query($reihe);
<br>der mysql_query(); hat SELECT * FROM tabelle drin und nit $reihe, $reihe stht im mysql_fetch_array();