Also es soll eine Leistungs-Auswertung der Mitarbeiter werden. Die geleisteten Stunden kommen aus der Zeiterfassung. Dafür mache ich als erstes eine SQL-Abfrage (tabelle stunden), in der ich auch mit den nötigen Einschränkungen einige zig-tausend Datensätze bekomme. Das Beispiel mit der Stadt hatte ich nur zum besseren Verständnis, es geht eigentlich um die "uid".
Jeder dieser Datensätze muss nun mit Daten des entsprechenden Benutzers erweitert werden zur Anzeige bzw. Berechnung (name, kostenstelle, stundensatz, etc). Dazu habe ich mir vorher ein Benutzer-Array mit allen relevanten Daten der Mitarbeiter aufgebaut, um nicht bei jedem Datensatz der Leistungen eine SQL-Abfrage auf Benutzertabelle + Kostenstellentabelle + Lohntabelle durchführen zu müssen. In diesem Benutzer-Array können sogar Benutzer mehrfach auftauchen, wenn dieser Benutzer mehrere Kostenstellen hat (z.B. mit Kst1 -> Anteil 70% und Kst2 -> Anteil 30%).
Die berechneten Daten schreibe ich in eine Zwischentabelle, was natürlich auch eine Menge Zeit kostet. Das hat aber den Vorteil, wenn die Auswertung einmal berechnet ist, kann der Benutzer mit Hilfe von Links Detaildaten auf- und zuklappen, ohne das die ganze Berechnung nochmal durchgeführt werden muss.
Bei der Berechnung machen die mehrfach auftretenden Benutzer pro Kostenstelle die Sache komplizierter, ich kann leider nicht das Benutzerarray so aufbauen $user_array[$uid][name], damit könnte ich direkt auf die Werte zugreifen, das geht nun aber leider nicht. Deshalb möchte ich das array auf den entsprechenden Benutzer eingrenzen, und dann durchlaufen.
$q = "SELECT * from stunden WHERE datum>='$von' and datum<='$bis' and ((tid>=200 and tid<300) or (tid>=800 and tid<900)) order by uid";
$r = mysql_query($q, $cid);
while ($row = mysql_fetch_object($r)) {
Benutzerdaten ermitteln;
Werte berechnen;
Satz in Zwischentabelle schreiben;
}
Ich hoffe, das war soweit verständlich.