SUM() über mehrere Tabellen

maweg

Mitglied
Hallo

Ich habe folgendes Problem:

Ich habe eine Tabelle in der alle registrierten User eingetragen sind (users) nun sollen zu jedem eingetragenen User per Userid aus verschiedenen Anderen Tabellen die Anzahl der Einträge ausgelesen und summiert werden. Mein Query sieht folgendermassen aus:

PHP:
SELECT u.Userid AS usid, count( DISTINCT m.id ) + count( DISTINCT pc.id ) + count( DISTINCT ug.id ) AS anzahl
FROM users u
LEFT JOIN messages m ON u.Userid = m.uid_send
LEFT JOIN pic_comments pc ON u.Userid = pc.uid
LEFT JOIN usergallery ug ON u.Userid = ug.uid
GROUP BY u.Userid

Das klappt auch alles wunderbar. Nur dauert diese Abfrage schon 2 Sekunden. Wenn ich jetzt noch mehr Tables dazunehme kann es sein das die Abfrage überhaupt nicht mehr ausgeführt werden kann.

Wo liegt nun das Problen? :(

Herzlichen Dank im Voraus
 
Das ist auch nicht gerade der richtige Anwendungsfall für Joins. Da ich nicht weiß welches RDBMS du nutzt hier mal eine hoffentlich allgemeinere Syntax:

Code:
SELECT USERID, SUM( AMOUNT )
FROM  
	(
	SELECT USERID, COUNT(*) AMOUNT
  	  FROM table1
 	 GROUP BY USERID
 	UNION ALL
	SELECT USERID, COUNT(*) AMOUNT
  	  FROM table2
 	 GROUP BY USERID
 	UNION ALL
	SELECT USERID, COUNT(*) AMOUNT
  	  FROM table3
 	 GROUP BY USERID
 	 )
GROUP BY USERID;
 
Danke für die schnelle Antwort.
Danach müsste mir folgende Abfrage ein Resultat liefern:
PHP:
SELECT Userid, SUM ( anzahl ) AS summe  FROM
(
SELECT uid AS Userid, COUNT(*) AS anzahl
FROM foto_comments
GROUP BY Userid
)
GROUP BY Userid

Ich bekomme jedoch folgende Fehlermeldung:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT uid as Userid, COUNT(*) AS anzahl
FROM foto_comments
G

Sieht für mich aus, als ob die MySQL-Version die Subselects nicht unterstützen würde. Benutze die Version 2.6.0 müsste also gehen. Ich komme einfach nicht weiter bei der Abfrage. Für weitere Tipps wäre ich euch sehr dankbar.
 
Code:
SELECT uid AS Userid
kann nicht richtig sein.
Entweder
Code:
SELECT Userid AS uid
und du musst den anderen SELECT-Befehl anpassen oder einfach nur
Code:
SELECT Userid
 
Zurück