Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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

Alles klar, danke schön!

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.