Suche soll nur ein paar Zeilen anzeigen
Armin Schäfer
- datenbank
0 Stephan Huber0 Armin Schäfer0 Stephan Huber0 kerki
Hallo Leute!
Ich habe mir MySQL und PHP4 auf meinem OS/2 Server installiert und habe damit eine kleine Datenbank zusammengebastelt. Die Datenbank enthält etliche grössere Artikel, die man auch alle anzeigen kann. Aufgebaut ist sie folgendermassen:
Field Type Null Key Default Extra
---------------+---------------+------+-----+---------+---------------
id int(11) PRI 0 auto_increment
artikel_name varchar(60) YES NULL
beschreibung text YES NULL
long_desc mediumtext YES NULL
In der long_desc, liegt der komplette Artikel.
Wenn man jetzt einen Artikel sucht, soll eine Volltext Suche in artikel_name, beschreibung und long_desc erfolgen. Das tut es auch und alle die richtigen Suchergebnisse werden angezeigt. Da die Artikel zwischen 3 und 80kb gross sind, würde ich sie als Suchergebnisse allerdings ungerne komplett anzeigen lassen. Läßt es sich irgendwie realisieren, nur die paar Zeilen in der Nähe des Suchbegriffes anzeigen zu lassen? Wenn der Suchbegriff mehrfach im Artikel auftaucht, sollten natürlich auch mehrere Stellen angezeigt werden. Ich stelle mir das folgendermassen vor:
Suchbegriff: Odin
Artikelname: Win32 Emulation
Beschreibung: Beschreibung einer Emulation
long_desc: bla bla bla bla.... [zwei bis drei Zeilen aus dem Artikel]
bla bla *Odin* bla blub
[Und nochmal ein Stück des Artikels]
Ciao,. Armin
Hallo Armin,
Du kannst das Ergebnis nehmen, die long_desc in einen String schreiben, und in diesem String mit den Stringfunktionen oder einer regex nochmals nach den Suchergebnissen suchen, Ihre Position bestimmen, und dann +/-20 Zeichen rausschneiden.
Viele Grüße
Stephan
Du kannst das Ergebnis nehmen, die long_desc in einen String schreiben, und in diesem String mit den Stringfunktionen oder einer regex nochmals nach den Suchergebnissen suchen, Ihre Position bestimmen, und dann +/-20 Zeichen rausschneiden.
Hmm, das liest sich so, als ob mysql intern die Funktionen hat die ich brauche. Wenn Du mir jetzt noch ein kleines Beispiel der Syntax verraten könntest, wäre ich überglücklich. Danke aber schonmal für Deine Antwort! Ich habe mir die String Funktionen angeschaut, konnte dort aber nichts passendes finden und mir ist auch noch keine Idee gekommen, wie ich damit den Text vor(!) dem Suchtext auffangen soll.
Ciao, Armin
Hallo Armin,
Hmm, das liest sich so, als ob mysql intern die Funktionen hat die ich brauche. Wenn Du mir jetzt noch ein kleines Beispiel der Syntax verraten könntest, wäre ich überglücklich. Danke aber schonmal für
Sorry, das war ein Mißverständnis, MySQL hat zwar Stringfunktionen, aber ich denke nicht, daß man damit das erreichen kann, was Du willst, einfach weil Du die Position brauchst, mehrfache Ergebnisse in einem Datensatz hast, usw.. Ich meinte, das Du es einfach nachher in PHP machst, ungefähr so:
$longdesc=$result["long_desc"];
$offset=0;
while($position=strpos($longdesc, $suchbegriff, $offset))
{
$startposition=$position-20;
$laenge=$startposition+40;
if($startposition<0)
{
$startposition=0;
}
$beschreibung.=substr($longdesc, $startposition, $laenge);
$offset=$startpositon+$laenge;
}
Viele Grüße
Stephan
Hallo !
Hmm, das liest sich so, als ob mysql intern die Funktionen hat die ich brauche.
Ich denke, das hast du falsch interpretiert.
MySQL bietet eine deratige Funktion nicht.
Gemeint war wohl, den String mittels PHP weiterzubearbeiten, was ich auch vorgeschlagen hätte.
Gruß,
kerki