我的数据库表是这样的
第一张桌子:
第二个表-lastsrvc(上一个服务信息)。id列-uniques自动递增每个问题的id。'cid'列-公司的id。它是两个表之间的链接列:main和lastsrvc。
现在,我想做的是,比方说,计算公司1的所有问题。我的代码以前发送while 1查询并获取主表的所有行。然后在while内为每个公司的行发送第二个查询。
如果将来有10000家公司,我想它会加载服务器。是否有任何方法可以发送一个查询而不是发送每个公司的查询(在一段时间内)?是否可以在while内使用COUNT before while而不是second query?
我的代码是这样的
<?php
$query=$db->query("SELECT * FROM main");
while($row=$query->fetch_object())
{?>
<tr>
<td><?=$row->id;?></td>
<td><?=$row->company;?></td>
<td><?=$row->address;?></td>
<td><?=$row->contact_name;?></td>
<td><?=$row->contact_phone;?></td>
<td><?php
if ($row->warr)
{
echo 'Var,'.$row->warr_year.' il';
}
else {
echo 'Yoxdur';
}
?></td>
<td>
<?php
if ($query2=$db->query("SELECT * FROM lastsrvc WHERE cid='$row->id'"))
echo $query2->num_rows;
?>
</td>
</tr>
<?php } ?>
最佳答案
将此用作顶级(且仅限)查询:
SELECT main.id, company, address, contact_name, contact_phone, COUNT(cid) as cnt
FROM main
LEFT JOIN lastsrvc ON main.id = lastsrvc.cid
GROUP BY main.id
一个带有join的查询几乎总是比运行1+n查询高效得多。你只需像往常一样呼出“cnt”字段:
<td><?php echo $row->cnt ?></td>