我有一個表包含公司中所有員工(hr_employees)。除此表之外,另一個表格包含所有開始日期和結束日期,以及它們具有的合同類型(hr_employees_status)。使用我得到的數據,我寫了一個1或0(1永久基礎,0其他)到excel電子表格,根據契約類型確定顏色編碼(1 =黑色,0 =藍色,綠色,灰色或紅色),每月(從2005年5月至現在)。我如何通過case子句來確定哪些單元格應該到哪裏,查看hr_employee_status表中的當前狀態。循環不寫入正確的值
它循環良好,並且它應該正確地執行99%的操作。唯一的問題是,只要員工從臨時合同移到永久基礎上,它有時不會將正確的值寫入單元格。
我已經將代碼稍微改爲只從數據庫中提取月份和年份(並將日期設置爲01),出於希望,因爲月和年是寫入單元格所需的全部內容,它會在正確的單元格中寫入正確的數據。但無濟於事。
我不知道作什麼崗位代碼,所以這裏是確定合同的類型,並將其寫入到Excel工作表的循環:
switch ($dates['status']) {
case '0':
$color = 'blue';
$cellcontent="0";
break;
case '1':
$color = 23;
$cellcontent="0";
break;
case '2':
$color = 'black';
$cellcontent="1";
break;
case '3':
$color = 'green';
$cellcontent="0";
break;
case '4':
$color = 'red';
if(mysql_num_rows($query) > 2)
$cellcontent = "0";
else {
$cellcontent="1";
}
break;
}
if($s['state'] == '4')
$color = 'red';
$format_content =& $workbook->addFormat(array('align' => 'center', 'size' => 11, 'numformat' => '@', 'fontfamily' => 'Calibri', 'left' => 1, 'bottom' => 1, 'right' => 1, 'color' => $color));
for($f = $start_at; $f <= $start_at+$count; $f++) {
$totalmonths = $totalmonths + $cellcontent;
$worksheet->write($k,15+$f,$cellcontent,$format_content);
}
$date
是結果從DB好評。 $start_at
是員工以合同類型開始的日期(從而確定要標記哪個月)。 $count
是開始日期和結束日期(月數)之間的差額。
我想知道爲什麼它不是從正式的日期開始,從臨時合同轉換爲永久合同。
如果需要其他信息,請告訴我。
編輯1: - 響應從DaveRandom和奧列格反饋
@DaveRandom: hr_employees
看起來是這樣的:
------------------------------------------
|employee_id|name|surname|otherinfo|state|
|1 |Foo |Bar | ******* | 1 |
|2 |Ben |Smith | ******* | 1 |
------------------------------------------
hr_employees_status
看起來是這樣的:
------------------------------------------
|employee_id|from_date |to_date |status|
|1 |2006-07-12|2009-08-11| 0 |
|1 |2009-08-12|0000-00-00| 1 |
|2 |2009-07-01|0000-00-00| 1 |
------------------------------------------
而且那麼Excel表格將輸出
Name Surname Start Date *dates* June-06 July06 ->- July09 Aug09 Sep09
Foo Bar 2006-07-12 *empty* 0 ->- 0 1 1
Ben Smith 2009-07-01 *empty* *empty* ->- 1 1 1
@Oleg
$start_at
如下:round(((substr($dates['from_date'],0,4) * 12) + substr($dates['from_date'],5,2)) - ((substr($start_date,0,4) * 12) + substr($start_date,5,2))) + 1; // $dates is a loop through the hr_employee_status table
見上文。
$dates
是通過hr_employee_status表的循環。我100%確定那個狀態在那裏。請解釋類型雜耍?所有的狀態值都是varchar(並且不要問我爲什麼,現在看它,這似乎是一件愚蠢的事情......)
可以顯示來自DB的示例數據和當前/想要的電子表格輸出嗎? – DaveRandom
*「有時不會將正確的值寫入單元格」*它代之以什麼?此外,您的日誌中的任何錯誤/警告? – Oleg
類型雜耍基本上是自動變量類型轉換。例如,將一個字符串與一個整數進行比較 - 該字符串會自動轉換爲整數。因此,在PHP中:'var_dump(0 ==「a」); // true'。 – Oleg