首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个时间循环不能正常工作

多个时间循环不能正常工作
EN

Stack Overflow用户
提问于 2014-04-18 09:27:16
回答 3查看 158关注 0票数 2

代理数据库表

代码语言:javascript
复制
agent_id  agent_name company_name
--------  ----------  -----------
1         AAA           XXX
2         BBB           YYY
3         CCC           ZZZ
4         DDD           XYZ

驱动数据库表

代码语言:javascript
复制
agent_id  driver_id   driver_name
--------  ----------  -----------
2         1           EEE
2         2           FFF
2         3           GGG
1         4           HHH
3         5           III
3         6           JJJ

我想像这样展示结果

代码语言:javascript
复制
AGENT DETAILS    DRIVER DETAILS
------------     --------------  
 1, AAA, XXX         1 Driver           
 2, BBB, YYY         3 Drivers           
 3, CCC, ZZZ         2 Drivers
 4, DDD, XYZ         0 Driver

我试过了,但结果却是这样

代码语言:javascript
复制
AGENT DETAILS    DRIVER DETAILS
------------     --------------  
 1, AAA, XXX         1 Drivers           
 1, AAA, XXX         3 Drivers           
 1, AAA, XXX         2 Drivers
 1, AAA, XXX            -

我已经附上了下面的图片和代码。

我希望有人能理解我的问题。这里我要给经纪人和司机看详细情况。代理表有agent_id、agent_name、company_name。我想从代理表中获取所有记录。然后,我要计算基于agent_id的驱动程序的数量。

在我的驱动程序db表中,我有agent_id、driver_id、driver_name。我想从基于agent_id的驱动程序表中获取驱动程序的数量。这是一个很好的方法。但是,我的问题是,我有多个while循环,所以它不能正确地获取。看看我附的照片。你可以很容易理解。在“代理详细信息”中,它总是在所有行中获取相同的行。

我肯定我在时间循环中犯了个错误。但是,我不知道怎样才能得到正确的结果。

代码语言:javascript
复制
<?php
$sql="select * from ".TBL_AGENT."";
$result=mysql_query($sql,$CN);



while($row=mysql_fetch_array($result))
{
    $agentid = $row['agent_id'];
    $agentname = $row['agent_name'];
    $companyname = $row['company_name'];
    $email = $row['email'];

    $sql_query = mysql_query("SELECT agent_id, COUNT(driver_id) AS ".TBL_DRIVER." FROM ".TBL_DRIVER."  GROUP BY $agentid");         while($rows = mysql_fetch_array($sql_query, MYSQL_ASSOC))
    { $noofdrivers = $rows['ta_drivers']. " DRIVERS"; echo "<br/>"; 
?>
    <tr>
         <td bgcolor="#FFFFFF" style="height: 70px; width: 300px; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc;">
            <b>Agent Name : </b><?=$agentname?><br /><br />
            <b>Business Name : </b><?=$companyname?><br /><br />
            <b>E-mail Id : </b><?=$email?>
         </td>
         <td bgcolor="#FFFFFF" style="height: 70px; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc;">
        <?php 
           echo $noofdrivers; ?>
         </td>
         <td bgcolor="#FFFFFF" style="height: 70px; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc;"></td>
         <td bgcolor="#FFFFFF" style="height: 70px; border-bottom: 1px solid #ccc;"></td>   
    </tr>
<?php }  } ?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-18 09:54:16

从这里的注释中可以得到答案,您可以在php中将表作为和循环地连接起来。

代码语言:javascript
复制
SELECT a.*,
COUNT(d.driver_id) `drivers_count`
FROM AGENT a
LEFT JOIN DRIVER d USING(agent_id)
GROUP BY a.agent_id

http://www.sqlfiddle.com/#!2/58594/1

票数 2
EN

Stack Overflow用户

发布于 2014-04-18 09:33:56

代码语言:javascript
复制
  SELECT a.agent_id, 
         a.agent_name,
         a.company_name,
         count(d.*) as count_of_drivers
    FROM agent a, driver d
   WHERE a.id_agent = d.id_agent
GROUP BY a.agent_id,
         a.agent_name,
         a.company_name
票数 1
EN

Stack Overflow用户

发布于 2014-04-18 09:45:33

在联接中使用一个查询(不要在昏迷中使用旧风格的联接)

代码语言:javascript
复制
 SELECT agent.agent_id, agent.agent_name, agent.company_name, count(driver_id) as cnt
    FROM agent left join driver on agent.agent_id = driver.agent_id
    group by agent.agent_id

或者你可以用这个

代码语言:javascript
复制
 SELECT agent_id, agent_name, company_name, 
    (Select count(*) FROM driver d WHERE d.agent_id = m.agent_id) AS cnt FROM agent m

这是可以理解的,但在大量数据上可能会慢一些。

SQLfiddle:

http://sqlfiddle.com/#!2/52e28/9/0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23151255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档