2
幾個月前我解決了從兩個表中獲取數據並製作活動日曆的問題。你可以在這裏看到:original question。 現在我想要更多東西:我想在同一時間爲每個用戶廣告一個事件。假設是假期(如聖誕節),我想爲所有用戶添加此事件。我首先使用兩個查詢是選擇假期,第二個選擇是否存在用戶。如果目前tip_id = 0,如果不是tip_id = 1。比我把所有東西放在一個表中。如果星期六或星期日的顏色是灰色的(使用css1),如果用戶存在,則單元格顏色爲白色,如果用戶不在,則顏色爲紅色。 我需要什麼?如果我在那個月有節假日,我需要單元格顏色也是灰色的(如星期六和星期日)。我嘗試了不同的想法,但是或者只有第一個假日才能變灰,或者只有最後一個或我在該月沒有假期時出錯。 代碼(只提取其中我需要幫助的部分)是這樣的:在日曆中添加活動
$db_luna=11;
$db_an=2013;
$days_in_month = 31;
mysql_select_db($database_dbconfig, $dbconfig);
$query_Holidays = "SELECT substring(data,9,2) AS zile_sarbatoare, data FROM sarbatori WHERE sarbatori.`data` LIKE '".$db_an."-".$db_luna."-%' ORDER BY zile_sarbatoare";
$Holidays = mysql_query($query_Holidays, $dbconfig) or die(mysql_error());
$row_Holidays = mysql_fetch_assoc($Holidays);
$totalRows_Holidays = mysql_num_rows($Holidays);
mysql_select_db($database_dbconfig, $dbconfig);
$query_Presence = "SELECT c.full_name, c.id_personal, COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-01') BETWEEN start_date AND end_date THEN tip_id END),0) '1', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-02') BETWEEN start_date AND end_date THEN tip_id END),0) '2', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-03') BETWEEN start_date AND end_date THEN tip_id END),0) '3', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-04') BETWEEN start_date AND end_date THEN tip_id END),0) '4', COALESCE(MIN(CASE WHEN CONCAT($db_an, '-', $db_luna, '-05') BETWEEN start_date AND end_date THEN tip_id END),0) '5' FROM calendar c";
$Presence = mysql_query($query_Presence, $dbconfig) or die(mysql_error());
$row_Presence = mysql_fetch_assoc($Presence);
$totalRows_Presence = mysql_num_rows($Presence);}
<?php do { ?>
<tr>
<td><?php echo $nr_crt, '. ' , $row_Presence['full_name']; ?></td>
<?php
$css1 = 'white';
$trim = '';
for ($a = 1; $a <= $days_in_month; $a++){
$data_calculata = date("Y-m-d",mktime(0,0,0, $db_luna, $b, $db_an));
if ($row_Presence[$a] == 0) {$legend = $row_Presence['full_name']."".$a;
$day_of_week = date("N",mktime(0,0,0, $db_luna,$a ,$db_an));
if ($day_of_week == 6 OR $day_of_week == 7) {$css1 = 'grey';}
else {$css1 = 'white';}
if ($row_Presence[$a] == 1) {$css1 = 'red'; $legend = $row_Presence['full_name']." - Absent";}
echo '<td " title= "'.htmlspecialchars($legend).'" class='.$css1.'></td>';
$nr_crt = $nr_crt + 1;
?>
</tr>
<?php } while ($row_Presence = mysql_fetch_assoc($Presence)); ?>
</table>
最好你在你的事件表中指定一個類型,並將其設置爲「全部」,而不是爲每個用戶輸入一個條目。雖然選擇你可以通過像WHERE type ='ALL'或user_id = 10這樣的條件得到它。這只是一個建議,根據你的需求進行驗證 – Damodaran