Volltextsuche über mehrere Tabellen

BenschM@ster

Mitglied
Servus allerseits,
ich baue zur Zeit eine kleine Such-Engine.
Die Suche läuft über mehrere Tabellen. Dabei werden die Spalten verschieden gewertet mittels match() against().

Das Problem ist, dass ich natürlich keinen Fulltext-Index über 2 Tabellen anlegen kann.

Konkret ausgedrückt sieht es so aus:
Tabelle Produkte
ID - Name - Beschreibung - Firmen ID

Tabelle Firmen
ID - Firmierung

Die Firmen ID entspricht der ID aus der Tabelle Firmen.

Bei einer Suche sollen jetzt sowohl Name als auch Beschreibung, sowie die Firmierung durchsucht werden, wobei jede Spalte anders gewichtet wird.
Solange das über eine Tabelle geht habe ich keine Probleme.

PHP:
SELECT id,name , 3*(MATCH (name) AGAINST ('$suchwort')) AS score1, 1,8 * (MATCH beschreibung AGAINST ('$suchwort')) AS score2 FROM kataloge WHERE  MATCH (name,beschreibung) AGAINST ('$suchwort') ORDER BY score1 DESC

Aber wie bringe ich jetzt die zweite Tabelle ein?
Per Union? Leider weiß ich nicht wie man mit Union umgeht.

Würde mich über eine Antwort freuen.
Gruß,
Ben
 
Ja kann man mit UNION machen. UNION vereinigt zwei Mengen (Abfrageeregebnisse) miteinander. Damit die MEngen vereinigt werden können müssen sie exkat den selben Aufbau besitzen. Das bedeutet gleiche Anzahl von Spalten, gleiche Namen und Datentypen für die Spalten und auch gleiche Reihenfolge. Ist das bei den beiden Mengen nicht der Fall so wird UNION einen Fehler erzeugen.
Vereinigen tust du Mengen dann mit einem umfassenden SELECT dass dir alle Elemente aus der Vereiningungsmenge zurückliefert. Bei Bedarf kannst du die Vereinigungsmenge wiederum mit ORDER BY sortieren. Um zu wissen aus welcher Tabelle der Eintrag stammt kannst du in der Unterabfrage ja ne Spalte mit nem konstanten String erzeugen:

SELECT * FROM
(SELECT id, 'katalog' AS tabelle, name , ...AS score1, 1, ...AS score2 FROM kataloge WHERE MATCH ...)
UNION ALL
(SELECT id, 'firmen' AS tabelle, Firmierung AS name, ...AS score1, ... AS score2 ...)
ORDER BY score1 DESC;
 
Zuletzt bearbeitet:
Leider sind die beiden Tabellen aber nicht gleich aufgebaut.
Außerdem würde er auf diese Weise doch in beiden Tabellen getrennt suchen, wenn ich aber 2 Stichwörter eingebe soll es ja auch möglich sein, dass das eine Stichwort die Firma ist und das andere der Produktname.

Leider krieg ich das so noch nicht hin.
 
Zurück