0

我只是想知道使用数据库查询的方式。我最近开始在 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 查询。

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

提前感谢您的任何建议。

4

2 回答 2

1
  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
于 2013-02-06T14:08:41.290 回答
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 值。在回答我自己的问题时,这种方法比先放入数组要快得多,我相信这是正确的方法。

于 2013-02-07T10:20:50.063 回答