Mailinglisten-Archive |
(sorry, gestern hatte ich mit einem falschen Absender geschrieben -
hoffentlich kommt die E-Mail nicht doppelt)
Hallo Mitleser,
ich arbeite an einem MySQL / PHP-Projekt, in welchem ich nach bestimmten
Artikeln im Titel und in der Beschreibung (bis zu 1000 Zeichen) suchen
lasse. Gelegentlich gibt es eine sehr große Ergebnismenge, so daß ich
diese auf 5 Artikel pro Seite reduziere (LIMIT 0,5 ... LIMIT x,5). Nun
möchte ich natürlich auch die Anzahl der Treffer anzeigen. Bisher habe
ich das wie folgt gelöst:
SELECT count(artikel.art_id) FROM ... WHERE ... ;
bestimmt mir die Anzahl der Treffer. Ist die Anzahl der Treffer > 0, dann
gibt es eine zweite Abfrage, welche mir meine gewünschten Attribute
liefert:
SELECT ... LIMIT 0,5;
(für die erste Seite).
Nun meine Frage:
Kann man das evtl. auf eine Anfrage reduzieren?
Der Grund: Die Volltext-Suche im Inhalt dauert bei bestimmten Wörtern
schon gelegentlich recht lange (1000 Treffer kommen schon mal vor). Evtl.
kann ich ja die Antwortzeiten reduzieren ... die Beschränkung auf eine
SQL-Abfrage wäre immerhin schon einmal etwas. Mit der Stopwortliste werde
ich mich auch noch beschäftigen. Hat da jemand eine, die auf den
deutschen Sprachraum zugeschnitten ist?
Weiterhin handelt es sich bei der Volltextsuche um einen einfachen JOIN,
der auch mal über 5 Tabellen geht.
SELECT
DISTINCT inhalt.art_id
titel_deutsch2.titel2
preis.preis_vk
preis.preis_evk1
preis.preis_evk2
FROM artikel, inhalt, titel_deutsch2, preis
WHERE MATCH inhalt.inhalt AGAINST ('$qtext')
AND titel_deutsch2.art_id = inhalt.art_id
AND artikel.art_id = inhalt.art_id
AND preis.art_id = inhalt.art_id
...
ORDER BY MATCH inhalt.inhalt AGAINST ('$qtext') DESC
<gekürzt>
Macht es Sinn erst einmal die Volltextsuche zu starten
SELECT
DISTINCT inhalt.art_id
FROM inhalt
WHERE MATCH inhalt.inhalt AGAINST ('$qtext')
und anschließend mit deren Ergebnismenge weiter zu arbeiten und diese
weiter zu reduzieren? Als Ergebnismenge werden ausschließlich INT
geliefert. Man könnte die ja in HEAP-tables zwischenspeichern ... nur
macht das bei 1000 Treffern überhaupt noch Sinn (Speicher!)?
Bye,
Heiko
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive