0

PHP-MSSQLクエリに問題があります。次のような結果を出す必要がある結合テーブルがあります。

    Department        Group A              Group B           Total A+B
                 WORKHOUR A OTHOUR A    WORKHOUR B OTHOUR B      WORKHOUR  OTHOUR
    HR             10         15     25   0               35       15
    IT              5          5                               5        5
    Admin                                    12   12              12       12

クエリは、指定された日付ごとに何人の従業員をカウントします(管理者はデータを入力し、送信されると、クエリは上記の結果を提供します)。

問題は、表示する行がない場合、最終的な出力が混乱することです。列が右にシフトされます

すなわち:ITのグループAのみ管理者のグループBのみ

Department        Group A              Group B           Total A+B
             WORKHOUR A OTHOUR A WORKHOUR B OTHOUR B      WORKHOUR  OTHOUR
HR      10       15       25     0               35      15
IT       5        5        5         5
Admin   12       12       12        12

私の質問は、これを防ぐ方法は?私はWhileですべてを試しましたが、それ以外の場合は..結果は同じです。 返す行がない場合に出力「0」を表示するにはどうすればよいですか? エコー「0」;

これは私の質問です:

    select DD.DPT_ID,DPT.DEPARTMENT_NAME,TU.EMP_GROUP, sum(DD.WORK_HOUR) AS  WORK_HOUR,      
    sum(DD.OT_HOUR) AS OT_HOUR
    FROM DEPARTMENT_DETAIL DD
    left join DEPARTMENT DPT
    ON (DD.DEPT_ID=DPT.DEPT_ID)
    LEFT JOIN TBL_USERS TU
    ON (TU.EMP_ID=DD.EMP_ID) 
    WHERE DD_DATE>='2012-01-01'
    AND DD_DATE<='2012-01-31'
    AND TU.EMP_GROUP!=2
    GROUP BY DD.DEPT_ID, DPT.DEPARTMENT_NAME,TU.EMP_GROUP
    ORDER BY DPT.DEPARTMENT_NAME

これは私が使用したロジックの1つですが、必要な結果が返されません::

    while($row = mssql_fetch_array($displayResult))
{


if ((!$row["WORK_HOUR"])&&(!$row["OT_HOUR"]))

{
echo "<td >";
echo "empty";
echo "&nbsp;</td>";

echo "<td >";
echo "empty";
echo "&nbsp;</td>";

}
else 

{
echo "<td>";
echo $row["WORK_HOUR"];
echo "&nbsp;</td>";

echo "<td>";
echo $row["OT_HOUR"];
echo "&nbsp;</td>";

}



}

助けてください。私はこれを2日間やっています。@ __ @

4

3 に答える 3

1

私はあなたの質問を誤解しなかったと思います。いくつかの行が欠落している理由は、場合によってはtupさえも取得しなかったためです。

たとえば、単純なテーブルt1(key1 varchar(200)、key2 varchar(200)、val integer)があり、次のようなクエリを記述した場合select key1, key2, sum(val) from t1 group by key1, key2;

値が-であると仮定します

apple week1 4
apple week2 5
pear  week1 3
pear  week1 3
apple week2 3
apple week2 4
apple week1 5

クエリでは、(pear、week2)=>何らかの値を取得することはありません。

同様に、次のような条件付きチェックをトリガーすることさえできない場合があります(!$row["WORK_HOUR"])&&(!$row["OT_HOUR"])

以下のコードがお役に立てば幸いです。

$results = array();

$allDepts = array();
$allGroups = array();

while($row = mssql_fetch_array($displayResult))
{
    $deptId = $row['DPT_ID'];
    $deptName = $row['DEPARTMENT_NAME'];
    $group = $row['EMP_GROUP'];
    $workHours = $row['WORK_HOUR'];
    $otHours = $row['OT_HOUR'];

    // set up a thorough list of depts & groups
    $allDepts[$deptId] = $deptName;
    $allGroups[$group] = $group;

    // store the values of hours
    $results[$deptId][$group]['work'] = $workHours;
    $results[$deptId][$group]['ot'] = $otHours;
}

// go through all possible combination of (dept, groups)
foreach($allDepts as $deptId => $deptName) {
    echo "<tr><td>$deptName</td>\n";
    foreach($allGroups as $group) {
        $workHours = $results[$deptId][$group]['work'];
        printTd($workHours);
        $otHours = $results[$deptId][$group]['ot'];
        printTd($otHours);
    }
    echo "</tr>\n";
}

function printTd( $value ) {
    $value = $value ? $value:"empty";
    echo "<td>$value</td>\n";
}
于 2012-06-21T12:26:10.637 に答える
0
$arr = array();
while($r = mysql_fetch_assoc($rec))
{
   $arr[] = $r;
}

if(count($arr) == 0){
echo 0;
}else{
//do something else
}
于 2012-06-21T07:13:05.913 に答える
0

ふぅ。最後に、@LiangLiang Zhengの回答を使用して、最終的な総計と各行の勤務時間とOT時間を取得できました(ビューの行)。(真剣に、私は基本的で単純なPHPしか知りません。また、配列などの使用方法もよく知らないので、自分の知識でコーディングするだけです)。

私が今しなければならない唯一のことは、各列の総計を表示することです: 総労働時間グループA、総OT時間グループA、総労働時間グループB、総OT時間グループB。(誰でもこれについて私を助けることができますか?)

とにかく、ここでは、各行/行の合計作業時間と合計 OT 時間、および作業時間と OT 時間の両方の最終総計を取得する方法を示します (表の下部に表示するため):

    <?php

    $total_workhours=0;
    $total_ot=0;
    // go through all possible combination of (dept, groups)
    foreach($allDepts as $deptId => $deptName) {

    $dept_workhour=0;
$dept_ot=0;

    echo "<tr><td>$deptName</td>\n";

    foreach($allGroups as $group) 
{
    $workHours = $results[$deptId][$group]['work'];
    printTd($workHours);
    $otHours = $results[$deptId][$group]['ot'];
    printTd($otHours);

    $total_workhours+=$workHours;
    $total_ot+=$ot_hour;

            $dept_workhour +=$workHours;
    $dept_ot +=$ot_hour;

    }

echo "<td> $dept_workhour</td>\n";
echo "<td>$dept_ot</td>\n";
    echo "</tr>\n";
    }
    ?>
    <tr align="center">
    <td>TOTAL</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td ><?php echo $total_workhours; ?></td>
    <td><?php echo $total_ot; ?></td>
    </tr>

    <?php
    function printTd( $value ) {
    $value = $value ? $value:"empty";
    echo "<td>$value</td>\n";
    }
于 2012-06-24T05:02:05.040 に答える