Armin Schäfer: Suche soll nur ein paar Zeilen anzeigen

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

  1. 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

    1. 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

      1. 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

      2. 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