Mailinglisten-Archive |
Mahlzeit,
> >gruebele schon einige Zeit darueber, wie bzw. ob man ein Textfeld
> >indizieren kann/sollte um die Abfrage zu beschleunigen.
Hier klinke ich mich jetzt mal ein:
Versuche mal folgendes:
Beim Import des Datensatzes zerlege den beliebig (!) großen Text in alle
seine Worte und lege die einzeln in eine Tabelle ab:
table desc {
id INT UNSIGNED NOT NULL;
beschr VARCHAR(30);
PRIMARY KEY(id)
KEY(beschr);
}
In einer weiteren Tabelle steht nun, welches Wort zu welchem Artikel
gehört:
table desc_1n {
artnr INT UNSIGNED NOT NULL;
id INT UNSIGNED NOT NULL;
PRIMARY KEY(artnr);
KEY(id);
}
Sucht man nun nach einem Wort, dann kannst Du wie folgt vorgehen:
SELECT id FROM desc WHERE beschr LIKE ("$beschr%");
Nun bekommt man die ID/s der/des Treffers. Ein Blick in die Tabelle
"desc_1n"
SELECT artnr FROM desc_1n WHERE id=$id
sollte nun den Datensatz finden, der das gesuchte Wort / Teilwort
enthält. Es sind demnach mindestens zwei Datenbankabfragen notwendig, was
aber trotzdem für schnelle Abfragen reicht.
So kann man auch große Texte sehr schnell und nach Teilwörtern
durchsuchen. Ein Update auf die neueste MySQL-Version ist nicht unbedingt
notwendig (wenn auch empfehlenswert).
Bye,
Heiko
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive