Veröffentlicht 1. Oktober 201014 j 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.
2. Oktober 201014 j 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
2. Oktober 201014 j 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.
2. Oktober 201014 j select * from adverts inner join adverts_tags on adverts.id=adverts_tags.advert_id inner join tags on tags.id=adverts_tags.tag_id
2. Oktober 201014 j 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
2. Oktober 201014 j 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')
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.