我的数据库表是这样的
第一张桌子:
第二个表-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>

07-24 09:37
查看更多