Mailinglisten-Archive |
ANGEL Harald schrieb: > Schönen Nachmittag! > > Ich hab eine Tabelle mit Terminen. (Termin, Anfangszeit, Endzeit) > Wie finde ich heraus, wieviele Termine an einem Tag max. gleichzeitig sind? > Ich muß einen Kalender programmieren... > > Meine Idee: > Da ich Termine nur stündlich eingeben kann, könnte ich eine Schleife zu jeder halben Stunde (0:30, 1:30, 2:30, ...) laufen lassen und ein "Select * Where anfangszeit < [halbe stunde] < endzeit" ist.. > Aber das muß doch leichter gehen oder? also ich hab das auch mal gebraucht, schon ne weile her deshalb sieht der Code auch noch etwas 'altbacken' aus, außerdem musste ich etwas anpassen, habs jetzt nicht probiert ob es so genau passt, aber das Grundprinzip müsste ja klar sein: Ich hol mir alle Termine für eine Woche und lege sie dann in einem Array ab $array[DATUM][SPALTE] wobei SPALTE normalerweise immer nur 1 ist, außer wenn sich Termine überschneiden, dann gibt mehr Spalten, man kann daraus dann eine Anzeige wie im Outlook oder David aufbauen. while ( $_appointment = mysql_fetch_assoc($result) ) { /** @var int daycol Tagesspalten (Spalten pro Tag) */ $daycol = 1; /** @var bool create_new_row Flag ob neue Spalte angelegt werden soll */ $create_new_col = true; while ( $create_new_col && isset($arrAppointment[$_appointment['day']][$daycol]) ) { /** @var bool create_new_row Flag ob neue Spalte angelegt werden soll */ $create_new_col = false; // wir durchsuchen alle Termine in dieser Spalte ob sich einer mit dem aktuellen überschneidet foreach ( $arrAppointment[$_appointment['day']][$daycol] as $_time_d_start => $__appointment ) { if ( $__appointment['time_d_start'] >= $_appointment['time_d_start'] && $__appointment['time_d_start'] < $_appointment['time_d_end'] ) { // startzeit liegt in einem anderen Termin $create_new_col = true; break; } elseif ( $__appointment['time_d_end'] > $_appointment['time_d_start'] && $__appointment['time_d_end'] <= $_appointment['time_d_end'] ) { // endzeit liegt in einem anderen Termin $create_new_col = true; break; } } $daycol++; } $arrAppointment[$_appointment['day']][$daycol][$_appointment['time_d_start']] = $_appointment; } credits goes to me! ;-) -- Sebastian Mendel www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com www.sf.net/projects/phpdatetime www.sf.net/projects/phptimesheet
php::bar PHP Wiki - Listenarchive