Zum Inhalt springen

Daten aus ainer assoziierten Tabelle holen


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben
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.
Geschrieben

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

Geschrieben
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 Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...