Seite 1 von 2

Problem mit einem Query

Verfasst: 23.07.2006 11:36
von Fabse
Hallo!

Ich brauch ein Query das daten abhändig voneinander aus 3 verschiedenen tabellen holt.
Ich will wissen, wieviele Alben es in der Kathegorie Geburtstage gibt und wieviele Bilder es in der Kathegorie Geburtstage gibt.

Tabellenaufbau:
gallery_cathegory:
id | cathegory
1 | Geburtstage
2 | Urlaube

gallery_albums:
id | album | date | cat_id
1 | Album1 | 1153612746 | 1
1 | Album2 | 1153612758 | 1
2 | Album3 | 1153612750 | 2

gallery_photos:
id | photo | thumbnail | description | date | album_id
1 | photo-1.jpg | photo-2.jpg | Beim Feiern | 1153612819 | 1
2 | photo-3.jpg | photo-4.jpg | Beim saufen 1153613488 | 1
3 | photo-6.jpg | photo-5.jpg | Beim saufen 1153613490 | 1
4 | photo-8.jpg | photo-7.jpg | Beim saufen 1153613495 | 2

Irgendwie bekomm ich das nicht auf die reihe. Kann mir jemand helfen?

Verfasst: 23.07.2006 12:46
von S2B
Das ist imho gar nicht so einfach, deswegen wird bei phpBB auch die forum_id bei jedem einzelnen Post gespeichert...
Ich bin bis jetzt nur auf folgende Lösung gekommen, vielleicht geht es auch einfacher, kA. :wink:

Code: Alles auswählen

SELECT 'album_count' AS name, COUNT(a.id) AS count
	FROM gallery_cathegory c
	LEFT JOIN gallery_albums a
		ON a.cat_id = c.id
	WHERE c.id = {CAT_ID}
	UNION
		SELECT 'photo_count' AS name, COUNT(p.id) AS count
			FROM gallery_albums a2
			LEFT JOIN gallery_photos p
				ON p.album_id = a2.id
			WHERE a2.cat_id = {CAT_ID}
{CAT_ID} ist die ID deiner Kategorie.

Verfasst: 23.07.2006 13:07
von Fabse
Hallo!

Erstmal danke! Es funktioniert! ;)
Jetzt muss nur noch der kathegoriename und die kathegorie id ausgelesen werden. Die ausgelesene kathegorie id soll dann anstatt {CAT_ID} stehen.

Ich will das ganze dann in ne schleife packen damit das alles ausgegeben werden kann.

Kannst du mir da nochmals helfen?

lg
fabse

Verfasst: 23.07.2006 18:32
von S2B
Ehrlich gesagt würde ich das ganze dann in 2 Queries aufteilen, ist sowieso sinnvoller (oder wie schon oben erwähnt eine Spalte cat_id in der photos-Tabelle):

Code: Alles auswählen

SELECT c.id, c.cathegory, COUNT(a.id) AS album_count
   FROM gallery_cathegory c
   LEFT JOIN gallery_albums a
      ON a.cat_id = c.id

Code: Alles auswählen

SELECT COUNT(p.id) AS photo_count
   FROM gallery_albums a
   LEFT JOIN gallery_photos p
      ON p.album_id = a.id
   WHERE a.cat_id = {CAT_ID}

Verfasst: 23.07.2006 19:03
von Fabse
OK aber wie pack ich das jetzt ein eine schleife damit kathegorie für kathegorie ausgegeben wird?
irgendwie steh ich aufm schlauch ;)

Verfasst: 23.07.2006 20:02
von S2B
Das erste Query gibt dir alle Kategorien und die Anzahl der Alben in der jeweiligen Kategorie zurück. Daraus machst du eine Schleife, in der du das zweite Query ausführst (und da hast du ja dann die ID der Kategorie :wink: ).

Verfasst: 23.07.2006 20:17
von Fabse
aaah ok danke :)
Aber ich dachte wenn ich das so löse, dann ist das ziemlich unperformant!?

gruß, fabse

Verfasst: 24.07.2006 13:28
von S2B
Ich hab dir schon die Alternative gesagt. :wink:

Verfasst: 24.07.2006 16:41
von Fabse
Also zusätzliche spalte ist performanter?

Verfasst: 25.07.2006 17:53
von S2B
Jep. :wink: