MYSQL - aus 3 Tabellen eine Anzahl ermitteln

Hallo,

Wie würdet ihr das machen.

Ich habe drei Tabellen wo Werte stehen die ich zusammengezählt brauche. Soll ich drei Tabellen einzeln Abfragen und dann summieren oder gibt es da eine elegantere Möglichkeit mit nur einer Abfrage aber mit subselect oder sot?! Habe mit subselects jetzt leider nicht so die Erfahrung, deshalb frage ich mal nach bevor ich lange suche und überlege...

Danke für eure Anregungen.
Grüße
 
Kommt drauf an.
Sind die Tabellen verknüpft?


Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Alle drei Tabellen haben eine ID (die ID wird mittels $_GET übermittelt in dem Fall ist es 1) mit der man sie verknüpfen kann

Also die Abfrage für eine Tabelle würde zb. so jetzt aussehen bei mir:

Code:
SELECT id AS summe FROM testberichte WHERE id = 1

Würde dann zb. 2400 ergeben.

Die nächste Abfrage wäre dann zb. so:

Code:
SELECT id AS summe FROM artikeln WHERE id = 1

usw.

Hoffe du kennst dich aus?
 
Der ID den Alias "summe" zu geben finde ich schon äußerst suspekt....
Schau dir das Beispiel von Yaslaw nochmal an (Tabellenstruktur, Beispieldatensätze)... Sowas von deiner Datenbasnk wäre gut ;)
 
Code:
SELECT COUNT(id) AS summe FROM testberichte WHERE id = 1

So könnte ich es auch machen. Vielleicht habe ich mich falsch ausgedrückt, ich will die Summe aller Datensätze mit der id 1 haben. In dem Beispiel wäre es halt 2400 Einträge mit der id 1. Bei den anderen zwei Tabellen wäre die selbe Abfrage. Es wäre halt nur interessant ob man das irgendwie nur mit eine Datenbankabfrage abfragen könnte?!
 
ohne viel zu überlegen und ungetestet:

SQL:
SELECT SUM(id_count) AS total_id_count FROM (
  SELECT COUNT(id) AS id_count FROM testberichte WHERE id = 1
  UNION ALL
  SELECT COUNT(id) AS id_count FROM testberichte2 WHERE id = 1
  UNION ALL
  SELECT COUNT(id) AS id_count FROM testberichte3 WHERE id = 1
);
 
Zuletzt bearbeitet von einem Moderator:
Danke! So klappt es bei mir. Verstehe nur nicht wieso ich zum Schluss das "AS x" anhängen musste.

Code:
SELECT SUM(id_count) AS total_id_count FROM (
  (SELECT COUNT(id) AS id_count FROM testberichte WHERE id = 1)
  UNION ALL
  (SELECT COUNT(id) AS id_count FROM testberichte2 WHERE id = 1)
  UNION ALL
  (SELECT COUNT(id) AS id_count FROM testberichte3 WHERE id = 1)
) AS x
 
Zurück