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