PHP MSSQL:查询不返回行时如何显示输出
我的PHP-MSSQL查询有问题。 我有一个连接表,需要给出如下结果:PHP MSSQL:查询不返回行时如何显示输出,php,sql-server,Php,Sql Server,我的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
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
查询将根据给定的日期计算有多少员工(管理员将输入数据,一旦提交,查询将给出上述结果)
问题是,当没有要显示的行时,最终输出是一团乱。该列被向右移动
i、 e:
只有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”?
回声“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
选择DD.DPT\u ID、DPT.DEPARTMENT\u NAME、TU.EMP\u GROUP、sum(DD.WORK\u HOUR)作为工时,
总计(日加班小时)为加班小时
来自部门详细信息DD
左连接部DPT
打开(DD.DEPT\u ID=DPT.DEPT\u ID)
左连接TBL_用户TU
ON(TU.EMP\u ID=DD.EMP\u ID)
其中DD_日期>='2012-01-01'
我希望我没有误解你的问题。缺少一些行的原因是,在某些情况下甚至没有得到任何tup
例如,如果我有一个简单的表t1(key1-varchar(200),key2-varchar(200),val-integer),
我编写了一个查询,比如selectkey1,key2,sum(val),通过key1,key2从t1组中选择代码>
假设值为-
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";
}
$results=array();
$allDepts=array();
$allGroups=array();
而($row=mssql\U fetch\U数组($displayResult))
{
$deptId=$row['DPT_ID'];
$deptName=$row['DEPARTMENT_NAME'];
$group=$row['EMP_group'];
$workHours=$row['WORK_hours'];
$otHours=$row['otu HOUR'];
//建立部门和小组的详细清单
$allDepts[$deptId]=$deptName;
$allGroups[$group]=$group;
//存储小时值
$results[$deptId][$group]['work']=$workHours;
$results[$deptId][$group]['ot']=$otHours;
}
//检查所有可能的组合(部门、组)
foreach($depts为$deptId=>$deptName){
回显“$deptName\n”;
foreach($all groups作为$group){
$workHours=$results[$deptId][$group]['work'];
printTd(工作时间);
$otHours=$results[$deptId][$group]['ot'];
打印TD(其他小时);
}
回音“\n”;
}
函数printTd($value){
$value=$value?$value:“空”;
回显“$value\n”;
}
phew。最后,使用@LiangLiang Zheng answer,我可以得到最终的总计以及每行(视图中的行)的工时和加班时间。(说真的,我只知道简单的基本PHP,不知道如何使用数组等等,所以我只会编写我所知道的代码)
我现在唯一需要做的就是显示每列的总计:
A组总工时、A组总加班工时、B组总工时、B组总加班工时。(有人能帮我吗?)
无论如何,这里是我如何得到每行/每行的总工作时间和加班时间,以及工作时间和加班时间的最终总计(显示在表格底部):
全部的
php代码是什么?这是php逻辑的问题吗?我写了一个答案来解决SQL中的一个问题,因为您只粘贴了SQL代码。但是您的问题是一个PHP/标记问题!如果没有您用来生成输出的代码,我们无法修复这个问题!您还可以使用SELECT IFNULL(my_列,0),如果列的结果为null@raheelshan这是我最初的答案,但因为这是一个演示文稿问题,所以我将其删除。@梁良正:我已经添加了上面的php代码。它不起作用。请帮忙,这太好了。但是如何计算总数呢?我需要计算每行(部门)的总工时、总加班时间(在最右边的列),然后在每列的底部返回总工时。(我对数组不太熟悉)您可以分配一个新数组$totals[$deptName]['work'或'ot',并将$workHours和$otHours添加到此数组中。如果不清楚,请告诉我好的。当然不清楚。我能够在表格底部计算工作小时和加班小时的最终总计,但我仍然不知道如何按每行显示总计。(A组和B组总工时),(A组和B组加班总工时)1。这真是对试图帮助你的人的侮辱。你不应该仅仅抓住答案&大部分代码,然后创建自己的答案。如果你试图回答自己的问题,至少要确保它是清楚和正确的。e、 g.“$Tsu hour”到底是什么?@梁梁梁正,对不起,但我确实放了“使用梁梁梁正答案”。实际上,这是工作时间,不是课时。很抱歉我的错。
apple week1 4
apple week2 5
pear week1 3
pear week1 3
apple week2 3
apple week2 4
apple week1 5
$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";
}
<?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";
}