mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: So 04.12.2016 13:42 Benutzername: Passwort: Auto-Login

Thema: [MySQL] Suchindizierung Einträge sortieren vom 24.01.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [MySQL] Suchindizierung Einträge sortieren
Autor Nachricht
lordle
Threadersteller

Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 40
Geschlecht: Männlich
Verfasst Mo 24.01.2005 15:05
Titel

[MySQL] Suchindizierung Einträge sortieren

Antworten mit Zitat Zum Seitenanfang

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 15:08, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
lordle
Threadersteller

Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 40
Geschlecht: Männlich
Verfasst Mo 24.01.2005 19:52
Titel

gelöst!

Antworten mit Zitat Zum Seitenanfang

also wens interessiert:

Code:
SELECT MIN(worte_verbindung.Relevanz) AS REL, worte.DS-ID
   FROM worte_verbindung
   INNER JOIN worte ON worte_verbindung.Wort-ID = worte.Wort-ID
   WHERE worte.wort_text LIKE 'mediengestalter%'
   GROUP BY worte.DS-ID
   ORDER BY REL

Durch die Gruppierung nach DS-ID werden alle doppelten DS eliminiert. Außerdem pick ich mir die kleinste Relevanz durch MIN() raus und alles ist wieder in Butter. So und jetzt gez aufn Bierchen!
  View user's profile Private Nachricht senden
Anzeige
Anzeige
 
Ähnliche Themen [MySQL] maximale Einträge Tabelle?
Bestimmte Einträge (durch ID bestimmt) aus MySQL-DB lesen
[mySQL] Nur Einträge mit bestimmten IDs auslesen
Sortieren mit MySQL
Datensätze aus MySQL-Datenbank sortieren...
MYSQL Datum Abfrage Sortieren
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.