fritze: suchausgabe bei myql

hallo :-)

ich habe eine kleine suchabfrage mit php und mysql geschrieben. leute können ein stichwort oder mehrere suchwörter eingeben und in der datenbank nach texten suchen.

das sieht dann etwa so aus:

select nachricht,titel from tabelle where suchwort=blblbl

der titel wird dann ausgegeben und verlinkt.

jetzt möchte ich aber von der nachricht noch die zeile zusaetzlich ausgeben, wo der suchbegriff vorkommt. und zwar genau die zeile, wo das wort zum erstenmal drin vorkommt.

wie geh ich am besten vor ??

danke

fritze

  1. Hi Fritze,

    select nachricht,titel from tabelle where suchwort=blblbl

    hmmm, ich denke 'mal das bedeutet, der artikel liegt jeweils direkt in deiner db, unter 'nachricht', was?

    Ich würde - alleine aus performance gründen - in der db aber nur die dateinamen der artikel und nicht die artikel selbst aufnehmen. Die artikel selbst stehen dann jeweils in externen ASCII-dateien.
    Dann kannst du einfach die mit den suchwörtern übereinstimmenden artikel in ein array laden, dieses ausgeben und dabei jeden suchbegriff meinetwegenen mit einem bestimmten tag umschließen (z.b. <b></b> oder was auch immer).
    Die dateinamen würde ich dann nach einem best. nummerkreis vergeben, z.b. JJMMTT.txt oder was du für dein projekt benötigst.

    Ich habe das neulich für ein shopping-system so gemacht, wobei eine kurzbeschreibung des produktes (einzeiler) direkt in der db liegt (=suchbegriffe) und die restliche, ausführliche produktbeschreibung in ASCII-files, deren namen der jeweiligen artikel-nr entsprechen. Diese werden dann einfach dazugeladen und mit in die seite geworfen, fertig. Und das funkt recht ordentlich.

    /*,*/
    Wowbagger

    ----------
    SHF-dG
    SHF-LoC
    Dipl. FI
    FA h.c.
    ----------

  2. Hallo !

    Ich denke, Du fragst nach dem wie genau. Sprich, wie mache ich in meinem Text das gefundene Wort optisch
    sichtbarer.

    Das müsste gehen mit sowas wie:

    $suchtext = ereg_replace($suchwort,"<b>$suchwort</b>",$suchtext);

    $suchtext = Text, der durchsucht wird
    $suchwort = Wort nachdem Text durchsucht werden soll

    Hoffe geholfen zu haben,

    Knud

  3. select nachricht,titel from tabelle where suchwort=blblbl
    der titel wird dann ausgegeben und verlinkt.

    Verstehe ich richtig, daß das Tabellenfeld "Nachricht" die gesamte Nachricht enthält?

    Wenn ja, enthält Deine Darstellung innerhalb dieser Tabelle irgend ein Kriterium, was Zeilen voneinander trennt?
    (Wenn nein, hast Du verloren. ;-)

    jetzt möchte ich aber von der nachricht noch die zeile zusaetzlich ausgeben, wo der suchbegriff vorkommt.
    und zwar genau die zeile, wo das wort zum erstenmal drin vorkommt.
    wie geh ich am besten vor ??

    Was genau verstehst Du unter "Zeile"?

    Wenn das oben erwähnte Zeilentrennzeichen existiert, dann kannst Du den Nachrichtentext an den Zeilen-Sollbruchstellen auftrennen (wie, das hängt von Deinem Kriterium und Deiner Sprache ab) und dann für jede Zeile lokal noch einmal prüfen, ob sie einen Treffer darstellt.

    (Daß eine Nachricht mehr als eine Trefferzeile erzeugen kann, hast Du ja selbst gemerkt - ich kenne eine Suchmaschine, in der man optional angeben kann, ob man den nur ersten oder alle Treffer innehalb der Nachricht sehen will.)