【问题标题】:how to count and echo the result to different columns如何计算结果并将其回显到不同的列
【发布时间】:2013-05-05 12:07:22
【问题描述】:

如何将 COUNT 的结果回显到名为:Resolved、Re-assigned 和 Closed 的三列?

我想计算已解决、重新分配和已关闭的工单的数量,并将它们放在相应的列中。我还需要总结每一列和每一行的总计。

这是一个票务系统,将通过严重性、类别 2、类别 3 和状态上传。

所以在下图中,将生成每列中包含唯一值的报告,因此对于严重性 5,我们在类别 2 下有两个条目,并且对于每个类别 2,类别 3 下会有不同的条目,然后我想显示有多少对于类别 3 下的每个条目,票证都已解决、重新分配和关闭,例如,严重性 5 下的 SMP_Backend 有一个待处理请求,其他类别 3 下的请求,因此对于待处理订单,假设我们已解决 3 并重新分配 2。我想要在 Pending Request 行的 Resolved 和 Re-assigned 列下显示这些数字,我还想显示每行和每列的总数...

图片如下:

这是我的代码:

    <?php
require 'include/DB_Open.php';

$dates = $_POST['dates'];

$sql ="SELECT trouble_type_priority as `Severity`
    , category_1
    , category_2
    , SUM(IF(status='Resolved', 1, NULL)) as `Resolved`
    , SUM(IF(status='Re-assigned', 1, NULL)) as `Re-assigned`
    , SUM(IF(status IN ('Closed','Suspended'), 1, NULL)) as `Closed`
    , COUNT(status) as `Total`
    FROM tbl_main
    WHERE resolved_date = '$dates'
    GROUP BY Severity, category_1, category_2";

$myData = mysql_query($sql)or die(mysql_error());

$output = 
"<tr>
    <th colspan='3' align='center'>Ticket Bucket</th>
    <th colspan='3' align='center'>Status</th>
</tr>
<tr>
    <th width='auto' align='center'>Severity</th>
    <th width='auto' align='center'>Category 2</th>
    <th width='auto' align='center'>Category 3</th>
    <th width='auto' align='center'>Resolved</th>
    <th width='auto' align='center'>Re-assigned</th>
    <th width='auto' align='center'>Closed</th>
    <th width='auto' align='center'>Grand Total</th>
</tr>\n";
$prev1 = $prev2 = $prev3 = '';
while (list($trouble_type_priority,$category_1,$category_2) = mysql_fetch_array($myData)) {

    if ($trouble_type_priority != $prev1) {
        $prCat1 = $trouble_type_priority;
        $prCat2 = $category_1;
        $prCat3 = $category_2;
        $prev1 = $trouble_type_priority; 
        $prev2 = $category_1;
        $prev3 = $category_2;
    }
    elseif ($category_1 != $prev2) {
        $prCat1 = '&nbsp';
        $prCat2 = $category_1;
        $prCat3 = $category_2;
        $prev2 = $category_1;
        $prev3 = $category_2;
    }
    elseif ($category_2 != $prev3) {
        $prCat1 = '&nbsp';
        $prCat2 = '&nbsp;';
        $prCat3 = $category_2;
        $prev3 = $category_2;
    }
    else $prCat1 = $prCat2 = $prCat3 = '&nbsp;';
    $output .= "<tr><td>$prCat1</td><td>$prCat2</td><td>$prCat3</td></tr>\n";
}
?>
<html>
<head>
<meta name="generator" content="PhpED Version 8.1 (Build 8115)">
<title>Example</title>
<meta name="author" content="Barand">
<meta name="creation-date" content="05/04/2013">
</head>
<body>
    <table border="0" cellpadding="1" >
    <tr>
    <th>Team Report</th>
    </tr>
    </table>
    <table border="0" cellpadding="1" >
    <tr>
    <th colspan='2'>Remaining Tickets:</th>
    </tr>
    <tr>
    <th width='72'>Wireless:</th>
    <th><input type='text' name='WirelessRemaining' id='WirelessRemaining' size='5' align='middle' /></th>
    </tr>
    <tr>
    <th>Wireline:</th>
    <th><input type='text' name='WirelineRemaining' id='WirelineRemaining' size='5' align='middle' /></th>
    </tr>
    </table>
    <table border="1" cellpadding="2">
        <?php echo $output?>
    </table>
    </table>
    <table border="1" cellpadding="1">
    <tr>
    <td width="34" style="display:none">&nbsp;</td>
    <td width="68" style="display:none">&nbsp;</td>
    <td width="144" style="display:none">&nbsp;</td>
    <td width="56" style="display:none">&nbsp;</td>
    <td width="34" style="display:none">&nbsp;</td>
    <td width="93" style="display:none">&nbsp;</td>
    <td width="107" style="display:none">&nbsp;</td>
    </tr>
    <tr>
    <td colspan="6" align="center">Total</td>
    <td align="left">&nbsp;</td>
    </tr>
    </table>
</body>
</html>

【问题讨论】:

  • 您的代码易受 SQL 注入攻击。
  • 您提供的信息太少了。确定票证是否被重新分配所需的逻辑是什么?如果在同一天重新分配和解决票证(为什么不关闭),会发生什么?请编辑您的问题以澄清,最好在您的问题中包含太多信息而不是太少。
  • 现在提供更多信息...希望已经清楚...

标签: php html sql


【解决方案1】:

您要查询的内容称为 pivot 查询。根据您的 DBMS,可以使用 PIVOT 运算符或 CASE 语句来完成。像这样的:

select id, resolved, closed, resolved + closed as total
from (
    select   id
           , max(case type when 'R' then Q else 0 end) as resolved
           , max(case type when 'C' then Q else 0 end) as closed
    from (
       select id, type, count(type) as Q
       from cases 
       group by id, type
    ) as A
) as B

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多