Seite 1 von 3
Wie funktioniert die phpbb Suche?
Verfasst: 06.11.2004 16:15
von RusTin
Hi,
Ich möchte mir eine kleine Suchfuntion schreiben, die nur aus einem Forum Beiträge sucht. Allerdings will ich die selbst machen, da 1. nur der erste Beitrag des Themas durchsucht werden soll und 2. eine andere Ausgabe später erscheinen soll. So weit so gut. Ich hab dann probiert die Suche über die phpbb_search_wordlist Tabelle zu machen. Allerdings ist mir dann aufgefallen, dass da ja keine Wörter doppelt drin stehen und dann ja einige Beitrag fehlen werden wenn man nach oft benutzten Wörtern bzw. Namen sucht. Wie macht das denn phpbb?
Verfasst: 06.11.2004 17:29
von PhilippK
Die phpbb_search_wordlist beinhaltet einer Liste alle in den Beiträgen vorkommenden Wörtern. Jedem Wort wird dabei eine ID zugeordnet.
Die phpbb_search_wordmatch wiederrum beinhaltet dann die Zuordnung Wort - Beitrag.
Gruß, Philipp
Verfasst: 06.11.2004 18:04
von RusTin
Das hab ich mir auch schon gedacht, aber das kann irgendwie nicht stimmen. Ich habe zuerst den Suchbegriff aus der wordlist raussuchen gelassen und bekomme ja dann die Wortid. Dann hab ich die Stellen an der die Wortid in der wordmatch Tabelle vorkommt raussuchen lassen um dann an die Postid zu kommen. Allerdings kommt da nur eine raus, obwohl da einige mehr kommen sollten. Ausserdem hat die wordmatch Tabelle 5mal so viel Einträge, wie die word list Tabelle.
Verfasst: 06.11.2004 18:15
von Blutgerinsel
RusTin hat geschrieben:Ausserdem hat die wordmatch Tabelle 5mal so viel Einträge, wie die word list Tabelle.
Und was ist daran jetzt falsch?
Wenn ich:
a) Das Wort nur einmalig festhalte
b) Und dieses Wort in 1:n Beiträgen auftauchen kann
Muss ja wohl zwangsläufig die wordmatch Table größer sein?????
Verfasst: 06.11.2004 18:34
von RusTin
ja wenn das so wär, wärs ja toll, aber so ist es nicht.
Verfasst: 06.11.2004 19:06
von Blutgerinsel
RusTin hat geschrieben:ja wenn das so wär, wärs ja toll, aber so ist es nicht.
sprich Klarttext....
baust du was zusammen was nicht dem entspricht was es sein soll?
allg. Forenproblem?
Verständnisproblem?
Programmierproblem?
Verfasst: 07.11.2004 10:19
von RusTin
ich habe jetzt z.B. sogar ein Wort auf dem Titel eines Themas kopiert und danach gesucht. Ohne Erfolg. Sehr seltsam. Ich habe die Abfrage in der wordlist so gemacht:
Code: Alles auswählen
$result_words = mysql_query("SELECT word_id FROM phpbb_search_wordlist WHERE word_text LIKE '%$begriff%'");
Verfasst: 07.11.2004 13:18
von Blutgerinsel
RusTin hat geschrieben:ich habe jetzt z.B. sogar ein Wort auf dem Titel eines Themas kopiert und danach gesucht. Ohne Erfolg. Sehr seltsam. Ich habe die Abfrage in der wordlist so gemacht:
Code: Alles auswählen
$result_words = mysql_query("SELECT word_id FROM phpbb_search_wordlist WHERE word_text LIKE '%$begriff%'");
Das ist allerdings seltsam....Installiere dir mal den DB-Maintenance Mod und check mal die Tables.....
Verfasst: 07.11.2004 13:33
von RusTin
Den hab ich drauf. Was genau soll ich da ausführen? Suchtabelle erneuern oder was?
edit: aber wart mal. das kann daran nicht liegen! weil wenn ich es mit der phpbb suche mach, dann kommt der thread auch! da muss irgendwas an der abfrage nicht stimmen. Hab mal probiert anstatt "LIKE" einfach nen "=" zu setzen aber dann kam da nen mysql Fehler

Verfasst: 07.11.2004 13:49
von Blutgerinsel
RusTin hat geschrieben:Den hab ich drauf. Was genau soll ich da ausführen? Suchtabelle erneuern oder was?
edit: aber wart mal. das kann daran nicht liegen! weil wenn ich es mit der phpbb suche mach, dann kommt der thread auch! da muss irgendwas an der abfrage nicht stimmen. Hab mal probiert anstatt "LIKE" einfach nen "=" zu setzen aber dann kam da nen mysql Fehler

Jetzt kommen mir der Sache näher bin von einem allg. Fehler ausgegangen das du die Threads via dieser Table nicht bekommst ist doch wohl klar oder etwa nicht?
via dem hier bekomme ich alle post_ids die mit dem Suchbegriff assoiziert werden können......
Code: Alles auswählen
SELECT WMATCH.post_id
FROM
phpbb_search_wordlist WLIST
LEFT JOIN
phpbb_search_wordmatch WMATCH
ON WLIST.word_id=WMATCH.word_id
WHERE
WLIST.word_text LIKE '%blubb%'
Wenn ich in der Abfrage noch die post_text Table integrieren erhalte ich den geposteten Text.....
Wo ist nu das Problem eigentlich?
P.S.: = bedeutet gleich wenn es auch bei Access zum Beispiel zweckentfremdet wird, d.h. überladener Operator
Bei Mysql ist = auch wirklich =....Like verwendet man bei Feld(er) die man nach einem Muster durchsuchen lassen möchte...........