nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

n-m Tabelle mit Mehrfachverknüpfungen

Von: Marco Scheidhuber (johndoe.23.666@googlemail.com) [Profil]
Datum: 13.07.2008 22:40
Message-ID: <d486df36-8e6c-4df0-81f9-dedb145583da@26g2000hsk.googlegroups.com>
Newsgroup: de.comp.datenbanken.mysql
Liebe Leute,

ich habe ein Problem mit einem SLQ-Statement, das mich schon ein paar
Haare gekostet
hat. Ich habe eine Tabellenstruktur mit Artikeln, die Verschlagwortet
sind. Es gibt eine Tabelle
für die Artikel, eine für die Schlagwörter und eine n-m-Tabelle, die
die Verknüpfungen darstellt.
Ein Artikel kann dabei viele Schlagwörter enthalten.

SELECT DISTINCT artikel.id, sig, form, titel, beschreibung,
beschreibung2, vorname, nachname, verlag, ort, erstausgabe, isbn ,
schlagworte.schlagwort, schlagworte.id as schlagwort_id
FROM artikel
LEFT JOIN artikel_hat_schlagwort ON (artikel_hat_schlagwort.artikel_id
= artikel.id)
LEFT JOIN schlagworte ON ( artikel_hat_schlagwort.schlagwort_id =
schlagworte.id )
WHERE deleted=0
AND artikel_hat_schlagwort.schlagwort_id IN (1938 , 243 , 1743 ,
1802 , 77 )
GROUP BY artikel.id
ORDER BY erstausgabe DESC

Die Verknüpfungstabelle sieht einfach so aus:
artikel_hat_schlagwort_id  	int(10)
artikel_id 	int(11)
schlagwort_id  	int(11)

Mit meiner Abfrage erhalte ich alle Artikel, auf die die Schlagwörter
zutreffen - also eine ODER-
Verknüpfung. Was ich suche sind allerdings alle Artikel, die alle
gewählten Schlagwörter
enthalten - also eine UND-Verknüpfung. Was ich mir vorstelle ist, dass
ich in dem Statement
eine Liste aller Schlagwort-IDs des einzelnen Artikels erzeuge und
dann frage, ob die
Schlagwortliste des Artikels eine Teilmenge der gesuchten
Schlagwortliste ist. Also statt
AND artikel_hat_schlagwort.schlagwort_id IN (1938 , 243 , 1743 ,
1802 , 77 )
dann
AND (1938 , 243 , 1743 , 1802 , 77 ) IN (Liste aller Schlagwörter-IDs
des Artikels).

Kann das so gelöst werden? Wenn ja, kann mir jemand sagen, wie und
wenn nein, in welche
Richtung ich anders denken könnte?

Ich bin durch den Provider an MySQL 4.1.22 gebunden(mit Diskussion und
zusätzlichem Geld
wäre auch 5.0 drin).
Weiterhin sind die Tabellen relativ gross(rund 5000 Artikel, 2000
Schlagwörter und
40000 Querverbindungen), was eine schnelle Abfrage ohne Subselects
o.ä. notwendig macht.

danke fürs lesen und Gruß,
Marco

[ Auf dieses Posting antworten ]

Antworten