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

时间:2013-02-06 13:55:20

标签: php mysql arrays pdo

我只是想知道数据库查询的方法。我最近开始使用PDO和mysql。我正在编写一个小脚本来检查制造商,然后检查每个制造商的项目。我被困在是否将项目放在一个数组中更快(并且只使用1个查询)然后因为i循环为制造商数组使用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查询。

我正在尝试查看哪种方法是最佳做法和/或更快。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:0)

  1. 您的问题与PDO无关
  2. 你做得非常低效,但这与你提出的问题无关。
  3. 你必须要问的问题不是“哪个更快”,而是“哪种方式正确”。
  4. 要了解有关cout商品的制造商,你必须让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
    

答案 1 :(得分:0)

感谢'你的常识'给你的帮助,但它仍然没有向那些不在'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值。在回答我自己的问题时,这种方法比先放入数组要快得多,我相信这是正确的方法。