lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Mo 24.01.2005 16:05
Titel [MySQL] Suchindizierung Einträge sortieren |
|
|
Also ich hab ne Suchindizierung geschrieben
Code: | Tabelle Worte
+-------------+-----------|
| Wort-ID | Wort-Text |
|=============|===========|
| ID-Wert | das Wort |
+-------------|-----------+ |
Code: | VerbindungsTabelle Worte => Datensatz
+-------------+-----------+-------------+-----------+
| Verb-ID | Wort-ID | DS-ID | Relevanz |
|=============|===========|=============|===========|
| ID-Wert | Wort-ID | ind. Text | Relevanz |
+-------------|-----------+-------------+-----------+ |
Wie Ihr seht, wird bei einer Suchindizierung in die Worttabelle das Wort geschrieben und in die Verbindungstabelle dann dieses Wort-ID mit dem Datensatz nach Relevanz verknüpft. Überschrift bekommt Relevanz 1 und Text bekommt Relevanz 2. Läuft auch gut und problemlos. Aaaaber es gibt ein Problem mit einer etwaigen LIKE-Suche:
Nehmen wir ein, in der Wort-Tabelle steht folgendes:
1 Mediengestalter
2 Mediengestalterin
Der Datensatz 1 hat die Überschrift "Mediengestalter" und "Mediengestalterin" steht im Text.
Also ist in der Verbindungstabelle folgendes:
1 1 1 1
1 2 1 2
Wenn ich nun eine LIKE-Suche nach "mediengestalter" starte, findet er natürlich beide Worte. Da die aber ne unterschiedliche Relevanz haben, findet er dann den Datensatz doppelt. Genau das will ich aber nicht. Deswegen mach ich ein DISTINCT-Select. Aber dann sortiert er mir nicht nach der Relevanz!
Code: | SELECT DISTINCT worte.DS-ID
FROM worte_verbindung
INNER JOIN worte ON worte_verbindung.Wort-ID = worte.Wort-ID
WHERE worte.wort_text LIKE 'mediengestalter%'
ORDER BY worte_verbindung.Relevanz |
Das Ergebnis ist *nicht* nach Relevanz sortiert, sondern ich erhalte eine falsche Reihenfolge, wenn mehr als die o.g. Einträge in der Verbindungstabelle stehen. Hab ich da irgendwas verpasst?
Wenn ich das Distinct weg lasse, wird richtig sortiert, aber dann halt aufgrund der unterschiedlichen Wort-ID hab ich dann zweimal die DS-ID drinstehen, was ich ja so nicht will!
Kann mir da jemand bitte helfen?
-- edit Nachtrag:
hab vergessen: die Sortierung fängt bereits ohne Inner Join an zu spinnen:
Code: | SELECT DISTINCT DS-ID
FROM worte_verbindung
WHERE WORT_ID IN (1,2)
ORDER BY Relevanz |
Zuletzt bearbeitet von lordle am Mo 24.01.2005 16:08, insgesamt 1-mal bearbeitet
|
|