Zum Inhalt springen

Daten aus ainer assoziierten Tabelle holen


automatix

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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')

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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