Volltextsuche mit Inner Joins
myMojito
- datenbank
Hallo SelfForum,
ich befasse mich gerade mit einer Volltextsuche. Ich habe eine Tabelle, in der Angaben zu Handbücher hinterlegt sind. Die Handbücher sind in Kategorien eingeteilt, die ich in einer zweiten Tabellle abgelegt habe. Mittels einer id-Nummer sind die beiden Tabellen mitteinander "verbunden".
Jetzt möchte ich die Datenbank nach einem Suchbegriff durchsuchen können. Das Durchsuchen der Tabelle für Handbücher hat auch funktioniert, nur wenn ich jetzt auch die Tabelle mit den Kategorien durchsuchen möchte gibt es Probleme.
Hier meinn Code:
SELECT lv2.name, hb.id, hb.produkt_bezeichnung, hb.produkt_zeichnung, hb.p_index, hb.vds_nr, hb.vds_klasse
FROM $Config::db_handbuch hb
INNER JOIN $Config::db_rubrik_lv2 lv2 ON hb.reference_id = lv2.id
WHERE MATCH (lv2.name, hb.produkt_bezeichnung, hb.produkt_zeichnung, hb.bestell_nr, hb.p_index, hb.vds_nr, hb.vds_klasse)
AGAINST ('$term')
Das INNER JOIN funktioniert. Wenn ich jedoch in die MATCH-Anweisung lv2.name (für den Namen der Kategorie) zuweise bekomme ich eine Fehlermeldung: Wrong arguments to MATCH.
Kann ich überhaupt eine Volltextsuche zweier Tabellen in einer Anweisung verbinden, oder bin ich gerade komplette auf dem Holzweg.
Um die Verwirrung noch komplett zu machen: Die Kategorien sind wiederum in Rubriken eingeteilt die ebenfalls in einer neunen Tabelle liegen und über ids miteinander verbunden sind. Aber das ist erst der nächste Schritt ;-)
greets
myMojito
Hi myMojito,
ich befasse mich gerade mit einer Volltextsuche.
in welchem Universum befindest Du Dich? MATCH ist IMHO etwas Proprietäres - welche Datenbank und welche Version? (mySQL 3.23+, flüstert mir gerade meine Kristallkugel zu ...)
WHERE MATCH (lv2.name, hb.produkt_bezeichnung, hb.produkt_zeichnung, hb.bestell_nr, hb.p_index, hb.vds_nr, hb.vds_klasse) AGAINST ('$term')
Wenn ich jedoch in die MATCH-Anweisung lv2.name (für den Namen der Kategorie) zuweise bekomme ich eine Fehlermeldung: Wrong arguments to MATCH.
Um MATCH überhaupt anwenden zu dürfen, brauchst Du entsprechend definierte FULLTEXT-Indexe. Mir wäre neu, daß diese auf mehr als einer Tabelle liegen dürfen.
Was Du tun kannst, ist, Deine MATCH-Klausel in ein OR verschiedener MATCHes über verschiedene Tabellen zu zerlegen.
Ich kann Dir allerdings nicht sagen, wie performant das dann wird - es kann durchaus funktionieren, ich rate aber zu exzessiver Verwendung von EXPLAIN bei der Kontrolle, ob die gewünschten Indexe auch wirklich angesprochen werden. Diese mußt Du auf jeden Fall erst mal anlegen.
Die Lösung Deines Problems beginnt also - wie so oft - im DDL-Teil Deiner Tabellen, nicht erst in der Abfrage.
Viele Grüße
Michael