Php 什么更快-多个PDO查询或数组查询

Php 什么更快-多个PDO查询或数组查询,php,mysql,arrays,pdo,Php,Mysql,Arrays,Pdo,我只是想知道数据库查询的方法。我最近开始在mysql中使用PDO。我正在写一个小脚本,检查制造商,然后检查每个制造商的项目。我被卡住了,是否将项目放置在一个数组中会更快(仅使用1个查询),然后在我循环制造商数组时,使用一个数组\u count\u值来获取项目数量,或者在循环中执行单独的查询来计数项目。 目前我有大约400家制造商和70000种产品 我当前使用数组的代码是: $itemquery = $conn->query("SELECT manufacturer FROM item_in

我只是想知道数据库查询的方法。我最近开始在mysql中使用PDO。我正在写一个小脚本,检查制造商,然后检查每个制造商的项目。我被卡住了,是否将项目放置在一个数组中会更快(仅使用1个查询),然后在我循环制造商数组时,使用一个数组\u count\u值来获取项目数量,或者在循环中执行单独的查询来计数项目。 目前我有大约400家制造商和70000种产品

我当前使用数组的代码是:

$itemquery = $conn->query("SELECT manufacturer FROM item_info_short");
$itemquery->execute();
$itemrow = $itemquery->fetchall(PDO::FETCH_ASSOC);
foreach ($itemrow as $itkey => $itvalue) {
   $items[] = $itvalue[manufacturer];
}
$it_qty = array_count_values($items);
然后对于我的循环:

$manu_query = $conn->query("SELECT manufacturer FROM manufacturers ORDER BY manufacturer");
while($rowsx = $manu_query->fetch(PDO::FETCH_ASSOC)){
    $rowid = $rowsx[manufacturer];
    $count = $it_qty[$rowid];
    if($count == '') $count = 0;
    echo "<option value=\"$rowsx[manufacturer]\">$rowsx[manufacturer]&emsp;$count Items</option>";
}
$manu_query=$conn->query(“按制造商从制造商订单中选择制造商”);
而($rowsx=$manu_query->fetch(PDO::fetch_ASSOC)){
$rowid=$rowsx[制造商];
$count=$it_数量[$rowid];
如果($count='')$count=0;
echo“$rowsx[制造商]&emsp;$count Items”;
}
如您所见,我总共使用了2个PDO查询。 另一种方法将使用401查询

我正在尝试看哪种方法是最佳实践和/或更快

提前谢谢你的建议

  • 你的问题与PDO无关
  • 你这样做效率极低,但这与你提出的问题无关
  • 你必须问的问题不是“哪一个更快”,而是“哪一个是正确的方式”
  • 要获得制造商数量及其商品数量,您必须使用SQL为您计算它们的数量

    SELECT manufacturer, count(*) cnt FROM item_info_short GROP BY manufacturer
    
    将返回所有制造商及其货物数量
    如果您想获得制造商详细信息,请将此查询与制造商表连接起来

    如果您需要列出所有制造商及其产品-请使用左键连接
    像这样的

    SELECT m.manufacturer, count(i.manufacturer) cnt 
        FROM manufacturers m LEFT JOIN item_info_short i
        ON i.manufacturer = m.manufacturer GROUP BY m.manufacturer
    

    感谢“您的常识”为您提供的帮助,但它仍然没有向我显示针对不在“item\u info\u short”表中的制造商的0结果

    SELECT m.manufacturer, 
          (SELECT COUNT(i.manufacturer) FROM item_info_short i 
                         WHERE m.manufacturer = i.manufacturer) cnt 
          FROM manufacturers m ORDER BY m.manufacturer ASC;
    

    这是我实际使用的最后一个mysql语句,它提供了一个完整的制造商列表,以及他们的数量(从item_info_short开始),包括0个值。在回答我自己的问题时,这种方法比先放入数组要快得多,我相信这是正确的方法。

    为什么不对其进行基准测试并查看?有关Stackoverflow的问题有一个问题。人们不会读的,非常感谢。我倾向于同意“哪种方式合适”应该是问题的标题。只有两个问题,我如何让它显示所有制造商,包括那些值为0的制造商,以及您是否也可以显示您将使用的join语句?我正尝试按照您的建议使用左边的语句,但它没有给出我预期的结果。i、 e.没有0个qtys,0个qtys最后似乎是1加上比制造商更多的结果。。选择item_info_short.manufacturer,count(*)cnt FROM item_info_short LEFT JOIN manufacturers ON(item_info_short.manufacturer=manufacturers.manufacturer)GROUP by manufacturer ORDER by manufacturer ASC再次感谢您。我猜左连接方法比我建议的使用子选择更好?让我建议你问另一个问题,提供表结构和期望的结果。不过,您不需要子选择。应该是左边的,我会再弄清楚的。。我有一个名为manufacturers的表,其中包含id、manufacturer、details和image,然后我有一个products表,其中有几列,但1称为manufacturer。我想列出所有制造商和ID,以及该制造商列出的项目数量。一些制造商可能没有列出任何项目。因此,该列表将包括id制造商和数量。