• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Join oder Subselect oder ...?

msi

Aktives Mitglied
Hallo zusammen,

hier mein nächsten Problem. Ich habe eine Datenbank mit zwei Tabellen die so aussehen:

Tabelle changes:
Code:
id  description   date
1   Beschreibung1 2023-01-15
2   Beschreibung2 2023-03-25
3   Beschreibung3 2023-05-01
Tabelle filenames:
Code:
id filename   change_id
1  datei1.jpg 1
2  datei2.jpg 1
3  datei3.jpg 1
4  datei4.jpg 2
5  datei5.jpg 2
6  datei6.jpg 3
7  datei7.jpg 3
8  datei8.jpg 3
In der Tabelle changes stehen Beschreibungen und Datum
In der Tabelle filenames stehen Dateinamen und die zugehörige ID in der Tabelle changes

Ich brauche jetzt diese 3 Datensätze:

Beschreibung1, 2023-01-15, datei1.jpg, datei2.jpg, datei.jpg
Beschreibung2, 2023-03-25, datei4.jpg, datei5.jpg
Beschreibung3, 2023-05-01, datei6.jpg, datei7.jpg, datei8.jpg

Hoffentlich habe ich das verständlich genug ausgedrückt.

Ich breche mir gerade echt einen ab, um die richtige Datenbank-Abfrage zu finden. Joins, Subselect? Kann mich bitte mal jemand in die richtige Richtung schubsen?

Danke und Grüße

Nachtrag:
Folgendes habe ich versucht:

Select:
Code:
SELECT `changes`.`id`, `changes`.`description`, `changes`.`date`, `filenames`.`change_id`, `filenames`.`filename` from `changes` LEFT JOIN filenames ON changes.id = filenames.change_id;

Ergebnis:
Code:
1     Beschreibung 1     2023-06-02     1     datei1.jpg
1     Beschreibung 1     2023-06-02     1     datei2.jpg
1     Beschreibung 1     2023-06-02     1     datei3.jpg
2     Beschreibung 2     2023-06-02     2     datei4.jpg
2     Beschreibung 2     2023-06-02     2     datei5.jpg
3     Beschreibung 3     2023-06-02     3     datei6.jpg
3     Beschreibung 3     2023-06-02     3     datei7.jpg
3     Beschreibung 3     2023-06-02     3     datei8.jpg

Das sind aber leider 8 Datensätze und nicht wie gewünscht 3 Datensätze
 
Zuletzt bearbeitet:
@sveka
Vielen Dank für deine Antwort.

Ich hatte meinen Beitrag nochmal ergänzt, das hat sich wohl mit deiner Antwort zeitlich überschnitten.

Ich habe dein Select gerade getestet, das Ergebnis ist das gleiche wie bei mir, ebenfalls 8 Datensätze.

Wenn meine Idee nicht machbar ist, dann wüsste ich die Daten per PHP irgendwie zusammensetzen.
 
Zuletzt bearbeitet:
Dann ggf. so ...


SQL:
SELECT changes.description, changes.date, GROUP_CONCAT(filenames.filename SEPARATOR ', ')
FROM changes
JOIN filenames ON changes.id = filenames.change_id
GROUP BY changes.id, changes.description, changes.date
 
@sveka
Wow, das sieht fast perfekt aus, das ist aber mein Fehler, da ich in der Beschreibung was vergessen habe

Nochmal die Tabelle
Code:
id  description   date
1   Beschreibung1 2023-01-15
2   Beschreibung2 2023-03-25
3   Beschreibung3 2023-05-01
4   Beschreibung4 2023-03-03
Das Problem ist jetzt, wenn die changes.id (hier die 4) nicht in der Tabelle filenames vorkommt, dann bekomme ich Beschreibung4 nicht.

Sorry, dass ich das nicht sofort erwähnt habe, ist mir erst gerade aufgefallen, nachdem ich dein Select getestet habe.

Aber auf jeden Fall schon mal tausend Dank
 
Perfekt!!! Ich danke dir, dass hätte ich alleine wohl nicht geschafft!
Nochmal tausend Dank, jetzt komme ich endlich weiter.
 
Zurück
Oben