Om nah hoo pez nyeetz, alle!
Von dedlfix habe ich eine Lösung erhalten, die ohne eine temporäre Tabelle auskommt.
SELECT
s.Name,
s.Vorname,
a.Text,
a.Kategorie
FROM
Schüler s
LEFT JOIN
Kreuztabelle k
ON k.SchülerID = s.ID AND
k.Status = 'o' AND
k.Erlass_k = 0 AND
k.Erlass_n = 0 AND
EXISTS (
SELECT
*
FROM
Aufgaben a
WHERE
a.ID = k.AufgabenID AND
a.Fälligkeit < '2014-03-10'
)
LEFT JOIN
Aufgaben a ON a.ID = k.AufgabenID
WHERE
s.Klasse = 29
Diese Abfrage liefert zunächst einmal alle Ergebnissätze Schüler - offene Aufgaben. Für die Schüler ohne offene Aufgaben schlägt das SELECT innerhalb von EXISTS fehl, weshalb dann Ergebnissätze
Name, Vorname, NULL, NULL
entstehen, die sich in PHP von einander trennen lassen:
while ($mahnung = $stmt -> fetch(PDO::FETCH_ASSOC)) {
if($mahnung['Text'] != '') {
// Schüler mit offenen Aufgaben
}
else {
// Schüler ohne offene Aufgaben
}
}
Matthias