php - 多个 while 循环无法正常工作

标签 php mysql join while-loop fetch

代理数据库表

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            -

我在下面附上了示例图像和代码..

enter image description here

希望有人能理解我的问题。在这里我必须显示代理和司机的详细信息。代理表有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 }  } ?>

最佳答案

从评论中可以看出答案,您可以将表加入为并在 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

关于php - 多个 while 循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151255/

相关文章:

javascript - 有没有办法用 php 检查 url 中的特定参数?

php - 使用 PHP 创建和下载 CSV

c++ - Boost::Geometry:如何在 multi_polygon 中连接相交的多边形?

SQL计算大多数书籍的作者

SQL 左外连接不提供完整表

php - CakePHP3 在 default.ctp 中获取用户

php - Laravel 4 - 2 个具有相同输入名称的表单

python - 通过 SQLAlchemy 在 MySQL 数据库中写入 Pandas Dataframe

mysql - 使用 SQL 将补充表中的 ID 和类型添加到父表(MySQL 和 Laravel 多态关系)

php - Laravel Eloquent 不同的 foreach 结果子查询