【问题标题】:multiple while loop won't work properly多个while循环将无法正常工作
【发布时间】:2014-06-02 19:03:28
【问题描述】:

代理数据库表

agent_id  agent_name company_name
--------  ----------  -----------
1         AAA           XXX
2         BBB           YYY
3         CCC           ZZZ
4         DDD           XYZ

驱动程序数据库表

agent_id  driver_id   driver_name
--------  ----------  -----------
2         1           EEE
2         2           FFF
2         3           GGG
1         4           HHH
3         5           III
3         6           JJJ

我想显示这样的结果

AGENT DETAILS    DRIVER DETAILS
------------     --------------  
 1, AAA, XXX         1 Driver           
 2, BBB, YYY         3 Drivers           
 3, CCC, ZZZ         2 Drivers
 4, DDD, XYZ         0 Driver

我已经尝试过了,但我得到了这样的结果

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统计司机的数量。

在我的驱动程序数据库表中,我有 agent_id、driver_id、driver_name。我想根据 agent_id 从驱动程序表中获取驱动程序的数量。这是一个工作正常。但是,我的问题是我有多个 while 循环,所以它不会正确获取。见我附上的图片。你很容易理解。在代理详细信息中,它总是在所有行中获取相同的行。

我确定我在 while 循环中犯了一个错误。但是,我不知道如何获得正确的结果..

<?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 }  } ?>

【问题讨论】:

  • 最好使用联合查询而不是循环运行查询
  • 以上这两个查询可以加入吗
  • @MKhalidJunaid :是的,它的工作。我不知道加入查询。发表你的答案我会接受你的答案
  • @MKhalidJunaid 请将其发布为答案!

标签: php mysql join while-loop fetch


【解决方案1】:

因为从 cmets 这里是答案,你可以加入你的表格并在 php 中循环它们

SELECT a.*,
COUNT(d.driver_id) `drivers_count`
FROM AGENT a
LEFT JOIN DRIVER d USING(agent_id)
GROUP BY a.agent_id

A fiddle Demo

【讨论】:

    【解决方案2】:

    使用一个带有连接的查询(不要使用带有逗号的旧式连接)

     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
    

    或者你可以使用这个

     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

    【讨论】:

      【解决方案3】:
        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
      

      【讨论】:

      • 我认为你必须分组
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2014-12-06
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多