MySQL: Abfrage mit LEFT JOIN erweitern

Hallo,
leider ist der Titel nicht lang genug, um das Problem richtig zu beschreiben.
Ich „arbeite“ zzt. an einer „Anwesenheitserfassung“ die Status „Anwesend/Nicht anwesend“ und eine StatusNachricht für sämtliche Mitarbeiter anzeigt.

Da dies bisher noch im kleinen Rahmen genutzt wurde, war es ausreichend einfach eine Liste mit allen Mitarbeitern anzulegen.
Nun soll die Ansicht erweitert werden und nach Gruppen aufgeteilt werden können.

Ich habe nun mehrere Stunden versucht (seit Vorgestern ^^), die Abfrage dahingehend zu ändern, dass dies möglich ist. Leider ohne Ergebnis.

Die Standardabfrage hatte als ergebnis

Name - StatusNachricht - Timestamp - Status (Da/Nicht da)

Dies soll nun durch die TeamID und den Teamname der jeweiligen Mitarbeiter ergänzt werden UND nach TeamID sortiert werden.

Das sortieren macht mir kein Problem, auch die beiden Abfragen im Einzelnen nicht.

SELECT 
u.ID, CONCAT(u.lastname, ', ', u.firstname) AS Name, m.message AS Message,
DATE\_FORMAT(l.timestamp,'%b %d %Y - %r') AS DateTime, l.status AS Status
FROM 
log l LEFT JOIN message m ON l.messageID = m.messageID, user u
WHERE(l.userID = u.ID)
AND logID IN
(SELECT MAX(l.logID)
FROM log l
GROUP BY l.userID)
ORDER BY name

Sowie

SELECT t.ID AS ID, t.name AS Team, u.ID AS UserID, u.Lastname AS Name
FROM team t LEFT JOIN user\_team ut ON t.ID = ut.TeamID, user u
WHERE (ut.userID = u.ID)

Mein Problem besteht also eigentlich nur darin, das ich beide abfragen nicht in eine Zusammen bekomme. Das bereitet mir Kopfschmerzen…

Für einen Hinweis wie das zu machen ist wäre ich schon dankbar.
Eine fertige Query benötige ich nichtmal.

Besten Dank vorab!
Schurke

Moin, Schurke,

mach doch aus der ersten Abfrage eine Query und nimm die anstatt u als Quelle für die zweite Abfrage.

Gruß Ralf

Gelöst, vielen DANK!!!
Hallo Ralf,

vielen Dank für den Denkanstoß!

Habe jetzt die Erste Query als Quelle für die Zweite genutzt.

Funktioniert PERFEKT!!!

Für die Nachwelt (vielleicht liest das ja nochmal jemand):

Die Subquery MUSS einen Alias bekommen.
Also

SELECT ... FROM xy, (SELECT Name, ID From 'Foo') AS Sub
WHERE ....

Auf die Felder der Unterabfrage kann dann wiederum mit Hilfe des Alias zugegriffen werden. Also Sub.Name, Sub.ID etc…

Bei mir wie folgt:

SELECT t.ID AS ID, t.name AS Team, Sub.Name, Sub.ID, Sub.Message, Sub.DateTime, Sub.Status
FROM team t LEFT JOIN user\_team ut ON t.ID = ut.TeamID,
(
SELECT 
CONCAT(u.lastname, ', ', u.firstname) AS Name, u.ID AS ID, m.message AS Message,
DATE\_FORMAT(l.timestamp,'%b %d %Y - %r') AS DateTime, l.status AS Status
FROM 
log l LEFT JOIN message m ON l.messageID = m.messageID, user u
WHERE(l.userID = u.ID)
AND logID IN
(SELECT MAX(l.logID)
FROM log l
GROUP BY l.userID)
) AS Sub
WHERE (ut.userID = Sub.ID)
ORDER BY Team, Sub.Name

Tag gerettet!!! :wink: