2012-06-21 79 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