Basementmedia
Grünschnabel
Hallo zusammen,
ich hab ein kleines MYSQL-Problemchen und hoffe, dass mir hier jemand etwas Unterstützung geben kann.
Einen Mysql-Forumsbereich hab ich hier leider nicht gefunden, daher hab ich das PHP-Forum verwendet:
Ich hab den folgenden Query, der mir aus einer Datenbank-Tabelle namens "stunden" (Mysql) gruppiert nach Projekt die Summe der Stunden ausgibt, die der User mit der ID 27 innerhalb eines Zeitraums gebucht hat.
Dieser Query erzeugt nun ca. 20 Einzelergebnisse, also die Stundensummen pro Projekt.
Im ersten Schritt möchte ich nun den Query so erweiteren, dass er mir die Summe aus den einzelnen Ergebnissen ausgibt. Auch das klappt noch wunderbar (die geänderten Teile hab ich fett markiert):
Nun kommt mein eigentliches Problem. Bisher ist die ID des Users ja noch fix auf 27 gesetzt.
Ich möchte den oben aufgeführten Query nun aber in einen Hauptquery integrieren, der für alle User der Tabelle "user" diesen Subquery durchführt (und der auch noch andere Teilberechungen macht, die nicht Gegennstand der Frage sind).
Dieser sieht erstmal folgendermaßen aus:
Ich hab nun versucht, den Subquery folgendermaßen zu integrieren (ale neuen Teile sind grün):
Und das funktioniert nun leider nicht mehr, weil u.ID zu tief verschachtelt ist.
Mir fällt aber kein Weg ein, diese Umschachtelung zu umgehen.
Puh, sorry, wegen dem vielen Text aber ich hoffe es ist halbwegs verständlich.
Hat jemand einen Tip, wie man z.B. die erste Umschachtelung umgeht, damit ich dann beim integrieren des Subqueries in den Hauptquery nur eine Verschachtelung hab? Denn dann würde es gehen.
Viele Grüße
Daniel
ich hab ein kleines MYSQL-Problemchen und hoffe, dass mir hier jemand etwas Unterstützung geben kann.
Einen Mysql-Forumsbereich hab ich hier leider nicht gefunden, daher hab ich das PHP-Forum verwendet:
Ich hab den folgenden Query, der mir aus einer Datenbank-Tabelle namens "stunden" (Mysql) gruppiert nach Projekt die Summe der Stunden ausgibt, die der User mit der ID 27 innerhalb eines Zeitraums gebucht hat.
SQL:
SELECT sum(stunden.stunden)
FROM stunden
LEFT JOIN projekte ON stunden.projekt_id = projekte.ID
WHERE stunden.user_id = [B]27[/B] AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id
Dieser Query erzeugt nun ca. 20 Einzelergebnisse, also die Stundensummen pro Projekt.
Im ersten Schritt möchte ich nun den Query so erweiteren, dass er mir die Summe aus den einzelnen Ergebnissen ausgibt. Auch das klappt noch wunderbar (die geänderten Teile hab ich fett markiert):
SQL:
SELECT SUM(stunden) as summe_stunden FROM (
SELECT sum(stunden.stunden) as stunden
FROM stunden
LEFT JOIN projekte ON stunden.projekt_id = projekte.ID
WHERE stunden.user_id = 27 AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id
)x
Nun kommt mein eigentliches Problem. Bisher ist die ID des Users ja noch fix auf 27 gesetzt.
Ich möchte den oben aufgeführten Query nun aber in einen Hauptquery integrieren, der für alle User der Tabelle "user" diesen Subquery durchführt (und der auch noch andere Teilberechungen macht, die nicht Gegennstand der Frage sind).
Dieser sieht erstmal folgendermaßen aus:
SQL:
SELECT
u.ID as dataset_id,
u.name
FROM user u ORDER BY u.name
Ich hab nun versucht, den Subquery folgendermaßen zu integrieren (ale neuen Teile sind grün):
SQL:
SELECT
u.ID as dataset_id,
u.name,
SELECT SUM(stunden) as summe_stunden FROM (
SELECT sum(stunden.stunden) as stunden
FROM stunden
LEFT JOIN projekte ON stunden.projekt_id = projekte.ID
WHERE stunden.user_id = u.ID AND (stunden.datum between '2018-01-01' AND '2018-01-31')
GROUP BY stunden.projekt_id
)x
FROM user u ORDER BY u.name
Und das funktioniert nun leider nicht mehr, weil u.ID zu tief verschachtelt ist.
Mir fällt aber kein Weg ein, diese Umschachtelung zu umgehen.
Puh, sorry, wegen dem vielen Text aber ich hoffe es ist halbwegs verständlich.
Hat jemand einen Tip, wie man z.B. die erste Umschachtelung umgeht, damit ich dann beim integrieren des Subqueries in den Hauptquery nur eine Verschachtelung hab? Denn dann würde es gehen.
Viele Grüße
Daniel
Zuletzt bearbeitet von einem Moderator: