Christian Seiler: SQL-Statements, verschiedene Module

Beitrag lesen

Hallo Andreas,

in dem Gästebuch stehen Kommentare, die eindeutig einem Bild zugeordnet sind oder was?

Nein. Aber ich verwende das gleiche Datenmodell für Gästebuch und Kommentare zu einem Bild.

Aber vielleicht rede ich ja auch an Deinem Problem vorbei... ;)

Ja, leider...

Ich machs nochmal deutlich:

Ich hab folgende Tabellen:

bilder
 - bild_id
 - breite
 - hoehe
 - beschreibung
 - ...
 - galerie_id

kommentare
 - kommentar_id
 - typ
 - ref_id
 - autor
 - kommentar

Beim Gästebuch ist in der Kommentartabelle typ = 0 und ref_id = 0. Bei der Bildergalerie ist in der Kommentartabelle typ = 1 und ref_id = id des Bilds. Bei anderen, zukünftigen Dingen, könnte ich mir vorstellen, dass typ = 2 und ref_id = andereid ist, wenn ich nunmal andere Dinge kommentieren will.

Jetzt habe ich eine Klasse GalerieBild, mit der ich auf die Tabelle 'bilder' zugreifen kann. Die bietet zum Beispiel die Funktion getList an. Diese macht nichts anderes, als folgenden SELECT auf die Datenbank abzusetzen und das Ergebnis zurückzuliefern:

SELECT bild_id, breite, hoehe, beschreibung, ..., galerie_id FROM bilder WHERE galerie_id = X ORDER BY irgendwas ;

Wobei X die aktuell gewählte Galerie ist.

Ich habe nun eine Klasse Kommentar, mit der ich auf die Tabelle 'kommentare' zugreifen kann. Diese bietet auch eine Funktion getList an, die halt eine Liste von Kommentaren zurückliefert. Außerdem bietet diese eine Funktion getCount an, die die Anzahl Kommentare zurückliefert:

SELECT COUNT(kommentar_id) FROM kommentare WHERE typ = X AND ref_id = Y

Wobei typ in diesem Fall 1 wäre (Galerie) und ref_id die ID des Bildes.

Wenn ich nun auf der Galerieübersicht zu jedem Bild die Anzahl an Kommentare zurückliefern will, habe ich 3 Optionen (nochmal):

1. In der Klasse 'bilder' das ganze mit reinpfrimeln:

SELECT bild_id, ..., galerie_id, COUNT(kommentar_id) FROM bilder LEFT JOIN kommentare ON kommentare.typ = 1 AND kommentare.ref_id = bilder.bild_id GROUP BY bild_id, ..., galerie_id ORDER BY irgendwas ;

2. In einer Schleife die Funktion getCount der Klasse Kommentare für jedes einzelne Bild aufrufen.

3. Eine Schnittstelle zwischen beiden Klassen herstellen, mit der dann der SELECT aus 1. dynamisch zusammengebastelt wird, ohne, dass die beiden Klassen voneinander und von den unabhängigen Datenstrukturen wissen.

Und zu 3 suche ich Anregungen.

Viele Grüße,
Christian