wieso so kompliziert? erstell dir doch nen array mit 7 werten für die 7 tage. gibst du beim tabellen aufbau eine zeit aus, wird dieser zeitwert zum array-wert addiert und gut is. man muss nicht zwingend alles per db lösen ^^ grobe vorstellung:
Code:
sum = array();
for(i=0; i<7; i++) sum[ts[i]] = 0; // initialisieren mit 0, als key wird unser timestamp für den tag benutzt
// tabelle erstellen...
for each(tabellenzeile)
// projekt-geblubber (tät, prod...)
row_sum = 0;
for each(tag-spalte mit dem ts gedingse) {
if(zeit[ts] > 0) {
echo <td>zeit[ts]</td>;
sum[ts] += zeit[ts];
row_sum += zeit[ts];
}
}
echo <td>row_sum</td>;
}
// edit: die sum ausgabe vergessen ^^
for each(sum-spalte mit dem ts gedingse) {
if(sum[ts] > 0) {
echo <td>sum[ts]</td>;
} else {
echo leerzelle;
}
}
und wie gesagt:
SKIZZIERT ^^
btw: hab grad nich so derb zeit, daher bin ich so still. das bissl was ich hab, zogg ich grad ^^ und ben hilft ja gut aus
ich weis nich, wie ichs blinkend hinbekomm ^^ nimm doch nich immer alles so wörtlich >< stell dir vor, einer haut den spruch raus "schei** die wand an!" - ungut, wenn man sich das zu herzen nimmt oder?
foreach nahm ich in dem bsp (es ist schlicht ein algorythmusentwurf, es soll völlig losgelöst von irgendeiner sprache sein) einfach nur, weil es vom lesen her gut verständlich ist. for each (zeile) wird wohl bedeuten, dass ich hier IRGENDEINE schleife meine, die das folgende für jede zeile macht. nicht mehr, und nicht weniger.
und das ganze würde in deinem code dieser zeile entsprechen:
foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
davor irgendwo (wenn ich mich nich irre noch vor die ganz äussere foreach für die tätigkeiten) solltest du ein array, dass die einzelnen summen annimmt und aufaddiert erstellen und mit 0 initialisieren. da ich den code nich auf die schnelle hatte, hatte ich gehofft, dass du mit ts (welche wir für die wochentage nehmen) was anfangen kannst und weist, was ich meine ^^ explizit hätte ich sowas hier gemeint:
Code:
$sum = array();
for ($i = 0; $i < 7; $i++) {
$ts = $wochenanfang + ($i * 60 * 60 * 24);
$sum[$ts] = 0;
}
dann eben rein in die schleife, dort wird dann irgendwann unser kram ausgegeben, bzw in das $td array geschrieben (hier hatte ich noch die variable $row_sum angelegt). hier eben zuerst das "projekt geblubber" (was uns hier nich interessiert) und danach die einzelnen tage. DAS hier:
Code:
[COLOR=red]$row_sum = 0; [COLOR=lime]for ($i = 0; $i < 7; $i++) { $ts = $wochenanfang + ($i * 60 * 60 * 24);
if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
$td[$i+5] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
[COLOR=red]$sum[$ts] += $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
$row_sum += $row_collector[$taet_id]['data'][$prod_id]['time'][$ts]; } else {
$td[$i+5] = ' ';
}
}
rot markiert die ergänzungen, die ich meinte. grün markiert ist im übrigen die entsprechung zu "for each(tag-spalte mit dem ts gedingse) {"

du siehst, obwohl ich for each schrieb, meinte ich einfach nur eine schleife, die sich um die werte der tage kümmert. eben eine irgendwie geartete schleife die was mit unserem $ts zu schaffen hat.
am ende wird dann noch besagte row_sum ausgegeben. ich hatte bei dem algorythmus natürlich nicht beachtet, dass wir werterfassung und ausgabe getrennt hatten ^^ aber gemeint wäre das hier gewesen:
Code:
for ($i = 0; $i < count($td); $i++) {
echo ' <td>'.$td[$i].'</td>';
}
[COLOR=red]echo ' <td>'.$row_sum.'</td>'; echo ' </tr>';
also halt ganz normal wie immer das gelumbe ausgeben und am ende die summe für die zeile. und dann mit dem edit meinte ich eben, dass NACH der normalen tabellen malerei (also alle db-ausgelesenen spalten wurden gebaut) nochmal die eine zeile mit den tages-summen ausgegeben wird. sonen code hattest doch glaube sogar schon oder? *nachgugg* ahja, das hier (dein blau markiertes):
Code:
echo ' <tr>';
echo ' <td>∑</td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
$time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
$sum = mysqli_fetch_row($time_table);
if (!$sum[0]) {
echo ' <td style="border:none"></td>';
} else {
echo ' <td>'.$sum[0].'</td>';
}
}
echo ' </tr>';
würde nach meiner idee halt so aussehen:
Code:
echo ' <tr>';
echo ' <td>∑</td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
echo ' <td style="border:none"></td>';
for ([COLOR=red]$i = 0; $i < 7; $i++) {
[COLOR=red]$ts = $wochenanfang + ($i * 60 * 60 * 24); if ($sum[$ts] == 0) {
echo ' <td style="border:none"></td>';
} else {
echo ' <td>'.$sum[$ts].'</td>';
}
}
echo ' </tr>';
fertig ^^ das wäre meine idee auf die schnelle gewesen. aber im bett später kam mir auch in etwa der selbe gedanke, den ben wohl ansprach. also es doch mittels db-anfrage zu machen. da hab ich grad einen verdacht...
das hier im blau markierten war deine anfrage für die summe der zeiten der wochentage, wenn ichs richtig seh:
$time_table = mysqli_query($mysqli,
"SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
um deine ausgabe zu generieren, nutzt du aber so einen von großen anfrage-strings. mit sehr viel mehr bedingungen im WHERE teil

wenn die nicht zueinander passen, dann können natürlich auch die ergebnisse nicht zueinander passen. zum bsp deine mitarbeiter-abfrage (der erste große dingens im code) müsste für die summe dann so aussehen:
$time_table = mysqli_query($mysqli,
"SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."' AND userid = '".$userid."';");
wenn der part fehlt, kann die db natürlich nich die richtigen daten zusammen suchen. ich weis jetz nich, ob du die variable $userid hast, wenn nich, müsstest du wieder über 2 tabellen abfragen, oder sie (also die variable $userid) dort mit auslesen (und erstellen), wo du $user erstellst (wenn es dort geht, sollte eigentlich). ansonsten könnte es auch so aussehen:
$time_table = mysqli_query($mysqli,
"SELECT SUM(zeit) FROM zeiten AS z, user AS u WHERE z.datum = '".$wochentag."' AND u.user = '".$user."' AND z.userid = u.id;");
so könnt es funktionieren. für die anderen fälle bräuchtest du dann natürlich auch wieder andere (anders bedingte) summen-abfragen.