======[PHP] Monats Schicht Plan====== SELECT @month_date := DATE(CONCAT_WS('-', YEAR(select_month), MONTH(select_month), day_of_month)) AS month_date, UNIX_TIMESTAMP(@month_date) AS unix_data, my_data.name, IF(@month_date BETWEEN holiday_start AND holiday_end, 'X', '') AS is_in_holiday FROM ( -- [Variablen] -- Ein Datum, dass den Monat und das Jahr vorgibt. -- Kann ein beliebiger Tag im entsprechenden Monat sein SELECT FROM_UNIXTIME({$selectDate}) AS select_month -- [/Variablen] ) AS my_vars, ( -- [Tagesnummern] -- Zahlen von 1 bis 32 SELECT @day_of_month := @day_of_month +1 AS day_of_month FROM (SELECT @day_of_month :=0) AS vars, -- [VirtualRows] -- 32 Zeilen um die Tageszeilen zu erstellen (4*4*2) (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS d1, (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS d2, (SELECT 1 UNION SELECT 2) AS d3 -- [/VirtualRows] -- [/Tagesnummern] ) AS days_of_month, ( -- [Daten] -- Simulieren der DB-Daten SELECT 'Hans' AS name, DATE('2012-01-05') AS holiday_start, DATE('2012-01-15') AS holiday_end UNION SELECT 'Paul', DATE('2012-01-25'), DATE('2012-02-05') -- [/Daten] ) AS my_data WHERE day_of_month <= DAY(LAST_DAY(select_month)) ORDER BY name, month_date %s HTML; $trHtml = << %s HTML; $tdHtml = <<<%2\$s> HTML; $month_date = array_unique($unix_data); $tds = array(sprintf($tdHtml, 'th', '')); foreach($month_date AS $value) $tds[] = sprintf($tdHtml, 'th', date('d. M', $value)); $trs[] = sprintf($trHtml, implode("\n", $tds)); foreach($data as $rowHeader => $values){ $tds = array(); $tds[] = sprintf($tdHtml, 'th', $rowHeader); foreach($values as $value) $tds[] = sprintf($tdHtml, 'td', $value); $trs[] = sprintf($trHtml, implode("\n", $tds)); } printf($tableHtml, implode("\n", $trs)); ?>