Hallo,
für meine Schule soll ich ein Programm schreiben, das es ermöglicht, die Fehlstunden der Abiturienten online zu verwalten. Dabei gibt es entschuldigte und unentschuldigte Fehlstunden. Ich möchte aus meiner Tabelle
a) die gesamte Anzahl der Fehlstunden pro Kurs und Schüler und
b) die Anzahl der unentschuldigten Fehlstunden pro Kurs und Schüler auslesen (das Gegenteil wäre natürlich auch möglich).
Diese Angaben werden gebraucht, da die Schüler nach 20 (oder 30?) unentschuldigten Fehlstunden pro Schuljahr die Schule verlassen müssen.
Meine Datenbank sieht folgendermaßen aus:
Ich habe eine Tabelle ‘user’, in der sämtliche Schüler und Lehrer samt Passwort gespeichert sind.
Felder:
[ul][li]id[/li]
[li]username[/li]
[li]password[/li][/ul]
Dann habe ich noch eine Tabelle ‘groups’, in der alle Oberstufenkurse als Gruppen, aber auch Gruppen für a) alle Lehrer und b) alle Schüler des Abiturjahrgangs 2009 (2010, 2011 usw.)
Felder:
[ul][li]id[/li]
[li]name[/li][/ul]
Name ist dabei der Kursname, z.B. 2009_M1 für den ersten LK Mathe des Abi-Jahrgangs 2009.
Desweiteren habe ich eine Tabelle ‘groupbelongings’, in der ich Gruppen und Schüler/Lehrer zusammenfüge.
Felder:
[ul][li]id[/li]
[li]userid[/li]
[li]groupid[/li][/ul]
Als letztes gibt es noch eine Tabelle, in der die Fehlstunden gespeichert werden. Dazu soll jeweils der Kurs und das Datum des Fehlens gespeichert werden.
Felder:
[ul][li]id[/li]
[li]numer[/li]
[li]excused[/li]
[li]userid[/li]
[li]groupid[/li]
[li]date[/li][/ul]
Das Feld “excused” ist dabei boolean, je nachdem, ob entschuldigt oder nicht. “number” enthält die Anzahl der Fehlstunden.
Folgendes SQL-Statement nutze ich, um alle Kurse und die jeweilige gesamte Anzahl der Fehlstunden eines Schülers auszulesen:
SELECT groups.name, groups.id, SUM(fehlstunden.number) as fehlstunden
FROM groups
LEFT JOIN groupbelongings
ON groupbelongings.groupid = groups.id
LEFT JOIN fehlstunden ON groupbelongings.groupid = fehlstunden.groupid AND fehlstunden.userid = 1
WHERE groups.name LIKE '2009_%'
AND groupbelongings.userid = 1
GROUP BY id
Daraus ergibt sich dann folgendes Ergebnis:
name id fehlstunden
2009_BI2 3 NULL
2009_SP2 4 NULL
2009_d2 5 6
2009_m1 6 1
2009_ek1 7 NULL
2009_zsowi2 8 NULL
2009_zge4 9 NULL
2009_e4 10 NULL
2009_ch1 11 NULL
Für den Schüler sind folgende Fehlstunden eingetragen:
3 Stunden in Kurs 5, nicht entschuldigt
3 Stunden in Kurs 5, entschuldigt
1 Stunde in Kurs 6, nicht entschuldigt
Mein Problem ist jetzt, dass ich entweder nur entschuldigte, nur unentschuldigte Fehlstunden oder alle Fehlstunden auslesen kann.
Ich hoffe, dass ich ich keine Angaben vergessen habe, wenn doch, bitte Nachfragen.
Falls ihr noch weitere Tipps in Bezug auf mein Datenbank-Design habt: Ich würde mich drüber freuen.
Vielen Dank,
Patrick Hilker