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
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
- Johannes Müller (14.07.2008 10:58)
- Christoph Herrmann (14.07.2008 11:11)
- Johannes Müller (14.07.2008 11:18)
- Christoph Herrmann (14.07.2008 11:30)
- Johannes Müller (14.07.2008 11:40)
- Harald Stowasser (14.07.2008 13:30)
