Mailinglisten-Archive |
Christoph Kiehl schrieb: > ich überlege gerade wie ich folgendes am geschicktesten löse: > > Ich möchte in einem tabellenfeld nach 2 wörtern suchen und zwar mit OR > verknüpft. Das ist ja noch einfach, aber jetzt hätte ich gerne das ich das > Ergebnis so geordnet bekomme das die rows wo beide wörter enthalten sind > ganz oben stehen, danach die mit einem wort und dann die mit 0 wörtern. Also > das Prinzip einer Suchmaschine ... kann man das mit einem select-statement > lösen? Ich hatte ja erst an REGEX gedacht, aber der gibt ja nicht zurück > wieviele treffer es gab ... Such mal auf dem TCX-Web-Server, ich meine mich erinnern zu können, daß dort ein Textretrievalsystem liegt. Grundsätzlich wird das System ohne spezielle Indexstrukturen aber nur bei sehr kleinen Datenbanken vernünftig arbeiten, da keine Indexstrukturen verwendet werden, wenn der Text z.B. mittels REGEX gesucht wird. Wenn Du Indices nutzen willst, unternimm folgendes: a) Gibt den Dokumenten eine Kennummer b) Zerlege alle Dokumente in einzelne Worte (muß in der Client-Software unternommen werden) c) Richte eine Tabelle für die Relation Kennung<->Wort ein. d) Über diese Tabelle sollten die von Dir gewünschten Abfragen möglich sein, wenn die Abfrage zu komplex wird, muß man sowas ggf. in der Client-Software nachbearbeiten, d.h. Du liest die Kennungen zu Wort a und dann die zu b und berechnest anschließend die gewünschte Gesamtliste. Die SQL-Abfrage für d) könnte in etwa so aussehen SELECT Kennung,Count(*) FROM ( SELECT Wort,Kennung FROM Wortliste WHERE Wort='a' UNION ALL SELECT Wort,Kennung FROM Wortliste WHERE Wort='b' ) Ob das mit den Unterabfragen so geht weiß ich nicht sicher, das Pronzip sollte aber klar sein. Elmar
php::bar PHP Wiki - Listenarchive