automatix Geschrieben 1. Oktober 2010 Teilen Geschrieben 1. Oktober 2010 Hallo zusammen! Folgende Fragestellung: Es gibt drei Tabellen (eigentlich vier, aber die Tabelle 'users' spielt hier keine Rolle): adverts [id, title], adverts_tags [advert_id, tag_id] und tags [id, word]. Wie man am Namen der zweiten erkennt, ist es eine Assoziation, durch die eine n:m-Beziehung zwischen den anderen beiden realisiert ist. Nun möchte ich gerne auf einer Seite eine bestimmte Anzeige ausgeben lassen, und zwar mit den Stichworten, mit denen sie vertaggt ist. Soll etwa so aussehen: Advert ID | Title | Tags 1 | bla | tag1, tag2, tag3 2 | foo | tag1, tag2, tag3 3 | bar | tag1, tag2, tag3 Mein Problem ist -- ich schaffe es nicht, folgende Abfrage um die Tag-Geschichte zu erweitern: SELECT `adverts`.`id` AS `advertid`, `adverts`.`user_id`, `adverts`.`title`, `adverts`.`timesent`, `adverts`.`description`, `adverts`.`numvisits`, `users`.* FROM `adverts` INNER JOIN `users` ON adverts.user_id = users.id WHERE (adverts.status = 'active') AND (adverts.id = '90') Wäre sehr dankbar, wenn mir jemand helfen würde. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 2. Oktober 2010 Teilen Geschrieben 2. Oktober 2010 Hallo ist dein Problem das Joinen über die Verknüpfungstabelle oder die Aufbereitung von "tag1, tag2, tag3"? BTW: warum sind denn in deinem SQL die Spalten- und Tabellennamen gequotet? Gruß Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
automatix Geschrieben 2. Oktober 2010 Autor Teilen Geschrieben 2. Oktober 2010 Hallo ist dein Problem das Joinen über die Verknüpfungstabelle [...] ? Ja BTW: warum sind denn in deinem SQL die Spalten- und Tabellennamen gequotet?Die Abfrage wurde mit Zend Framework generiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 2. Oktober 2010 Teilen Geschrieben 2. Oktober 2010 select * from adverts inner join adverts_tags on adverts.id=adverts_tags.advert_id inner join tags on tags.id=adverts_tags.tag_id Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
automatix Geschrieben 2. Oktober 2010 Autor Teilen Geschrieben 2. Oktober 2010 Vielen Dank! SELECT * FROM adverts INNER JOIN adverts_tags ON adverts.id=adverts_tags.advert_id INNER JOIN tags ON tags.id=adverts_tags.tag_id WHERE adverts.id = 34 Das Advert mit id 34 ist mit drei Tags verschlagwortet, also sieht die Ergebnistabelle so aus: Advert ID | Title | Tags 34 | bla | tag1 34 | bla | tag2 34 | bla | tag3 Wie kann ich die Ergebnistabelle auf eine Zeile reduzieren? Advert ID | Title | Tags 34 | bla | tag1, tag2, tag3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 2. Oktober 2010 Teilen Geschrieben 2. Oktober 2010 ein Subselect und entsprechendes Verketten der Tags Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
automatix Geschrieben 2. Oktober 2010 Autor Teilen Geschrieben 2. Oktober 2010 Alles klar, danke schön! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
automatix Geschrieben 2. Oktober 2010 Autor Teilen Geschrieben 2. Oktober 2010 SELECT adverts.`id` AS `advertid`, adverts.`user_id`, adverts.`title`, adverts.`timesent`, adverts.`description`, adverts.`numvisits`, `users`.*, ( SELECT GROUP_CONCAT(tags.`word` SEPARATOR '*TTT*') FROM `tags` LEFT JOIN `adverts_tags` ON (tags.`id` = adverts_tags.`tag_id` ) WHERE adverts_tags.`advert_id` = adverts.`id` ) AS tags FROM `adverts` LEFT JOIN `users` ON adverts.`user_id` = users.`id` WHERE (adverts.`status` = 'active') AND (adverts.`id` = '201') Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.