我的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
我的问题是,如何防止这种情况发生? 我已经尝试了所有的一切虽然......如果其他..但结果仍然是一样的。 如果没有要返回的行,如何显示输出“0” echo“0”;
这是我的QUERY:
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 " </td>";
echo "<td >";
echo "empty";
echo " </td>";
}
else
{
echo "<td>";
echo $row["WORK_HOUR"];
echo " </td>";
echo "<td>";
echo $row["OT_HOUR"];
echo " </td>";
}
}
请帮忙。我已经这样做了2天。 @ __ @
答案 0 :(得分:1)
我希望我没有误解你的问题。你丢失一些行的原因是你甚至没有得到任何一些情况。
例如,如果我有一个简单的表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)=&gt;一些价值。
同样,您甚至可能不会触发像(!$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";
}
答案 1 :(得分:0)
$arr = array();
while($r = mysql_fetch_assoc($rec))
{
$arr[] = $r;
}
if(count($arr) == 0){
echo 0;
}else{
//do something else
}
答案 2 :(得分:0)
表示不快。最后,使用@LiangLiang Zheng回答,我可以得到最后的总计和工作时间&amp;每行的OT小时数(视图中的行)。 (说真的,我只知道基本的,简单的PHP,并且真的不知道如何使用数组等等,所以我只根据我的知识编写代码)。
我现在唯一需要做的就是显示每个栏目的总计: 总工作时间组A,总工作时数组A,总工作时间组B,总工作时间组B 。 (任何人都可以帮我这个吗?)
无论如何,在这里我如何得到总工作时间&amp;每个行/行的总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";
}