簡體   English   中英

更快的方法-多個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值。 在回答我自己的問題時,此方法比首先放入數組要快得多,我相信這是正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM