代理数据库表
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的驱动程序的数量。
在我的驱动程序db表中,我有agent_id、driver_id、driver_name。我想从基于agent_id的驱动程序表中获取驱动程序的数量。这是一个很好的方法。但是,我的问题是,我有多个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 } } ?>发布于 2014-04-18 09:54:16
从这里的注释中可以得到答案,您可以在php中将表作为和循环地连接起来。
SELECT a.*,
COUNT(d.driver_id) `drivers_count`
FROM AGENT a
LEFT JOIN DRIVER d USING(agent_id)
GROUP BY a.agent_idhttp://www.sqlfiddle.com/#!2/58594/1
发布于 2014-04-18 09:33:56
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发布于 2014-04-18 09:45:33
在联接中使用一个查询(不要在昏迷中使用旧风格的联接)
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
https://stackoverflow.com/questions/23151255
复制相似问题