php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.10.2009, 17:55  
Neuer Benutzer
 
Registriert seit: 18.10.2009
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Patrick Hilker befindet sich auf einem aufstrebenden Ast
Standard MySQL - Felder mit verschiedenen Bedingungen summieren

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:
id
username
password
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:
id
name
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:
id
userid
groupid
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:
id
numer
excused
userid
groupid
date
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:
Code:
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:

Code:
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

Geändert von Patrick Hilker (18.10.2009 um 21:44 Uhr).
Patrick Hilker ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.10.2009, 09:08  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.233
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Ich würde dir vorschlagen, die Fehlstunden redundant zu halten. Also neben fehlstunden.number noch zwei weitere Datenfelder: fehlstunden.excused_number und fehlstunden.unexcused_number (oder wie auch immer du das nennen würdest).

Sobald es entschuldigte Fehlstunden sind, wird excused_number entsprechend gefüllt, sind es unentschuldigte, wird unexcused_number entsprechend gefüllt.

Das ist zwar eine eigentlich redundante Datenhaltung. Jedoch macht das dein Query sehr einfach (und aus Sicht der DB sehr schnell), du musst dann nur die Summe aus der jeweils richtigen Spalte bilden.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 27.10.2009, 16:23  
Erfahrener Benutzer
 
Registriert seit: 13.05.2009
Beiträge: 1.164
PHP-Kenntnisse:
Fortgeschritten
dennis81 befindet sich auf einem aufstrebenden Ast
Standard

Ich würde dir empfehlen einen passenden View zu schreiben.
dennis81 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql mehrere felder aus 2 tabellen bei vorhandensein eines cytrobic Datenbanken 9 30.06.2006 13:27
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MySQL eine Spalte mit zwei verschiedenen Werten auslesen Datenbanken 2 23.07.2005 15:25
Suche MySQL Funktion zum Verbinden 2er Felder R4v3r Datenbanken 2 12.07.2005 23:49
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
php MySQL Verknüpfung zweier Felder Datenbanken 2 05.02.2005 20:23
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
(MySQL) Felder auslesen, aber nur einmal wiedergeben PHP Tipps 2004 5 03.09.2004 15:29
[Erledigt] PHP5 &a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/datenbanken/60193-mysql-felder-mit-verschiedenen-bedingungen-summieren.html, mysql bedingungen, mysql summe bedingung, mysql sum bedingung, patrick hilker, php mysql summe bedingung, mysql summe in where bedingung, mysql feld bedingung, mysql aufsummieren, mysql summe mit verschiedenen bedingunge, mysql summe aus mehreren werten bilden, mysql bedingung sum, mysql summieren, \mysql summe bilden aus 2 spalten mit bedingung, mysql sum bedingungen, mysql summe aus mehreren feldern, mehrere sum mysql, mysql sum mit bedingung, \patrick hilker\, fehlstunden tabelle

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum