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


Whats quicker - Multiple PDO queries or Array Query

我只是想知道数据库查询的方法。我最近开始在mysql中使用PDO。我正在写一个小脚本,检查制造商,然后检查每个制造商的项目。我被卡住了,把项目放在一个数组中(只使用1个查询),然后当我为制造商数组循环时,使用array_count_values来获得项目数量,还是在循环中进行单独的查询来计数项目。我目前有大约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>";
}

正如您所看到的,我总共使用了2个PDO查询。另一种方法将使用401个查询。

我正在试着看看哪种方法是最好的练习和/或更快。

提前感谢您的建议。

  1. 你的问题与PDO无关
  2. 你这样做效率极低,但与你提出的问题无关
  3. 你必须问的问题不是"哪个更快",而是"哪个是正确的方式"

为了统计制造商的商品数量,你必须制作SQL来为你统计

SELECT manufacturer, count(*) cnt FROM item_info_short GROP BY manufacturer

将退还所有制造商及其商品计数
如果你想获得制造商的详细信息,请将此查询与制造商表联系起来

如果您需要列出所有制造商及其商品-请使用LEFT JOIN
像这个

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_info_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个值。在回答我自己的问题时,这种方法比先放入数组快得多,我相信这是正确的方法。