2012-06-21 48 views
0

我的PHP-MSSQL查询有问题。 我有一个连接表是需要给一个结果的东西是这样的: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 只有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 

我的问题是,如何防止这种情况发生? 我试过一切尽管....如果其他..但结果仍然是一样的。 如果没有行返回,如何显示输出“0”? echo“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 

这是我用过的逻辑之一,但不返回,我想::

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天。 @ __ @

+0

什么是php代码?会不会是PHP逻辑的问题? –

+0

我写了一个答案来解决SQL中的问题,因为您只粘贴了SQL代码。但是你的问题是一个PHP /标记问题!如果没有您用来生成输出的代码,我们无法解决这个问题! – GordonM

+0

你也可以使用SELECT IFNULL(my_column,0)如果列的结果为null,那么这将产生0 –

回答

0
$arr = array(); 
while($r = mysql_fetch_assoc($rec)) 
{ 
    $arr[] = $r; 
} 

if(count($arr) == 0){ 
echo 0; 
}else{ 
//do something else 
} 
1

我希望我没有误解你的问题。你缺少一些行的原因是,你甚至没有得到任何tup一些案件。

举例来说,如果我有一个简单的表T1(key1的VARCHAR(200),KEY2为varchar(200),VAL整数), 和我写的一样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 

随着查询,我永远不会得到像(梨,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"; 
} 
+0

这太好了。但如何总计?我需要计算每个行(部门)(最右列)的总工作小时数,总计ot,然后返回每列底部的总计工时。 (我真的不熟悉数组) – vamps

+0

你可以分配一个新的数组$ totals [$ deptName] ['work'或'ot'],并将$ workHours&$ otHours添加到这个数组中。让我知道如果它不明确 –

+0

好吧。绝对不清楚。我可以计算表格底部的WorksHour和OT Hours的最终总计,但我仍然不知道如何按每行显示总计。 (Total WorkHour Group A&B),(Total OT Group A&B) – vamps

0

phew。最后,用@梁亮郑的回答,我可以得到最后的总计和工作时间为每行(视线)& 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"; 
    } 
+0

1.这真是对试图帮助你的人的侮辱。你应该*不*只是获取答案和大部分代码并创建自己的答案。 –

+0

2.如果你试图回答你自己的问题,至少要确保它是清楚和正确的。例如,什么是“$ ts_hour”? –

+0

@梁良正,对不起,我确实把“使用梁亮郑的答案”。实际上,这是工作时间,而不是ts_hour。对不起这是我的错。 – vamps