質問

会社のすべての従業員を含むテーブル(HR_EMPLOYEES)を持っています。このテーブルに加えて、すべての開始日と終了日がある別のテーブル、さらに、どの契約の種類(HR_EMPLOYEES_STATUS)があります。

データが取得され、1または0(1永久的な、0 in erter)をExcelスプレッドシートに書き込み、契約の種類によって決定された色が符号化されています(1=黒、0=青、グリーン、グレーまたは赤)、毎月(2005年5月から現在までまで)。 HR_EMPLOYEEE_STATUSテーブルの現在のステータスを調べるために、どのセルがCase句であるかを判断する方法

それは罰金をループし、それが正しく正しくあるべきであることの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とOlegからのフィードバックへの応答

@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

  1. $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
    

  2. 上記を見てください。 $datesは、HR_EMPLOYEE_STATUSテーブルを介したループです。私は100%がそこにあるというステータスがあります。

  3. タイプジャグリングを説明してください。ステータス内のすべての値はVARCHARである(ここでそれを見て、それを見ているのは疑いの理由を聞かないでください...)

役に立ちましたか?

解決

あなたのコードの重要な部分がありませんので、あなたがより多くの詳細を提供するまで(例えば、$start_atを定義する場所に表示させてください。)私は推測できます...

  1. あなたは「正しい日付から始めないのですか」を尋ねますが、$start_atが定義されているコードを入力しません。それは私たちに役立つかもしれません。
  2. なぜあなたはswitchを生成しているのですか?それは$dates['status']にあることを確認していますか?
  3. $datesステートメントは、juggling typeの後の値を比較します...

    php.net

    switch ("a") {
    case 0:
        echo "0";
        break;
    case "a": // never reached because "a" is already matched with 0
        echo "a";
        break;
    }
    
    .

    これは、誤ったタイプのswitchが誤って停止したため、永久契約ステータス1が決して到達しない場合があります。

    switch statementを使って、コードで動作している変数の正確なタイプと値を確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top