从mysql获取结果,然后检查行和计数中的特定值

时间:2014-12-23 09:41:02

标签: php mysql

agent表和lead_submission表。

 id_agent   agent_name    last_login
 1          xxx          2014-11-28 12:15:47
 2          abc          2014-12-06 12:51:45
 3          cvb          2014-12-12 12:51:45

id_agent      agent_name    entry_date           qa_details                 SelDisposiotn
  1            xxx        2014-11-28 12:15:47    504:Yes|581:|515:No|      Complete Survey
  1            xxx        2014-11-28 12:15:47    504:Yes|581:Yes|515:No|   Complete Survey
  2            abc        2014-12-06 12:51:45    504:Yes|522:|515:No|      Complete Survey
  3            cvb        2014-12-12 12:51:45    504:Yes|532:Yes|515:No|   Partial Survey

我的查询是从agent_name表中获取agent的列表。来自count(agent_name)lead_submission的{​​{1}}表count(qa_details)来自lead_submissionSelDisposition lead_submission left join lead_submission on lead_submission.id_agent=agent.id_agent group by lead_submission.agent_name }

<?php
//DB connection goes here

$sql="
SELECT a.agent_name LoginAgent
     , COUNT(s.agent_name) AgentApplicationHit
     , COUNT(s.qa_details) QADetails
     , s.selDisposition Status 
  FROM agent a
  LEFT
  JOIN lead_submission s
    ON s.id_agent = a.id_agent 
 WHERE s.entry_date BETWEEN '2014-11-28 12:15:47' AND '2014-12-06 12:51:45' 
   AND s.SelDisposition = 'Complete Survey' 
 GROUP 
    BY s.agent_name;
";

$query=mysql_query($sql);

?>   
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<table border="1">
                <thead>
                  <tr>
                    <th>LoginAgent</th>
                    <th>AgentAppliccationHit</th>
                    <th>QA Details</th>
                    <th>Status</th>

                </tr>
  <?php while($row=mysql_fetch_assoc($query)) 
{?>

         <tr   style="color:red" >

        <td><?php echo $row['LoginAgent']; ?></td>
        <td><?php echo $row['AgentApplicationHit']; ?></td>  
        <td><?php echo $row['QADetails']; ?></td>   
        <td><?php echo $row['Status']; ?></td>          
        </tr>
                    <?php } ?>

我的结果: -

 LoginAgent  AgentAppliccationHit          QA Details                Status
    xxx             2                        2                      Complete Survey
    abc             1                        2                      Complete Survey

直到现在一切都很好。

现在我有另一张桌子question_details

qno  qshortcode   question
504   PPI         whatever
515   Test        whatever1

正如您可以看到来自504表的qno 515question_details来自qa_details表的lead_submission以及我count(qa_details)的结果1}}。

现在,我如何从qa_details lead_submission中的每个504:Yes|522:|515:No|行获取特定值计数,其中每行504515都在lead_submissionLoginAgent AgentAppliccationHit 504(PPI) 515(Test) Status xxx 2 2 2 Complete Survey abc 1 1 1 Complete Survey 表一样

{{1}}

1 个答案:

答案 0 :(得分:0)

首先,正如所建议的那样,你应该更正规化你的数据库......但是......你可以用你当前的设置得到你的计数......你需要使用一点RAM但是......如果问题,代理,客户答案和排列很多。

编辑您的查询以在结果中返回qa_details,例如:

SELECT qa_details, a.agent_name LoginAgent ... etc

这里是:

 $stats_manager = array(); //or $stats_manager = [] ; depending on your php version.while($row=mysql_fetch_assoc($query)) 
        {    
                 //split up the answers into their respective questions

    foreach(explode('|', $row['qa_details']) as $Question)
        {

         $QnA = explode(':', $Question); //$QnA[0] gives you the $Question number, $QnA[1] is the answer
    $stats_manager[$row['LoginAgent']][$QnA[0]]++; //increment the number of times Agent has a question in his qa_details column
    $stats_manager[$row['LoginAgent']]['AgentApplicationHit'] = $row['AgentApplicationHit']; 
    $stats_manager[$row['LoginAgent']]['QADetails'] = $row['QADetails'];  //still necessary? I doubt.
    $stats_manager[$row['LoginAgent']]['Status'] = $row['Status']; 
    }
        }

现在有一个包含所有座席的多维数组,以及它们各自的Q和A的数量 然后你可以简单地循环数组(我省略了表头和html的其他非关键位

foreach($stats_manager as $agent_name =>  $stats_data)
{
echo "<tr><td>$agent_name</td>";
//loop hrough all the fields
foreach($stats_data as $key => $value){
echo "<td>$value</td>";
}
echo "</tr>";
}

这里的关键是避免在整理数据之前回显任何内容。 此外,尽管这会起作用,但最好将其标准化

未测试。应该工作。

编辑:事后意识到我在每个循环中清空$stats_manager。固定 所以我不会让我编辑更正后的代码,所以我已经删除了stats_manager变量的初始化,但代码仍然有效,带有“notice undefined variable”警告