2013-02-06 76 views
0

我只是想知道哪個方式去與數據庫查詢。我已經開始使用PDO最近與MySQL。我寫了一個小腳本,檢查製造商,然後檢查每個製造商的項目。我堅持是否將放置在一個數組中的項目和(只使用1查詢),然後當我爲製造商數組循環使用array_count_values獲取項目數量或在循環中做一個單獨的查詢來計數項目。 我目前有大約400個製造商和70000個項目。什麼更快 - 多個PDO查詢或數組查詢

我使用數組當前的代碼是:

$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個查詢。

我想看看哪種方法是最佳實踐和/或更快。

在此先感謝您的任何建議。

+3

你爲什麼不以它爲基準來看? –

+1

Stackoverflow上的問題存在問題。人們不會讀它們。 –

回答

0
  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 
+0

非常感謝。我傾向於認同'哪個是正確的方式'應該成爲問題的標題。只有2個問題,我如何讓它顯示包括0值的所有制造商,並且還可以向我展示您將使用的加入聲明? –

+0

我正在嘗試按照您的建議使用左側,但它沒有給出我期望的結果。即沒有0 qtys 0看起來最終爲1加上更多的結果比廠家..選擇item_info_short.manufacturer,計數(*)cnt從item_info_short左加入製造商開(item_info_short。製造商= manufacturer.manufacturer)GROUP按製造商ORDER BY製造商ASC –

+0

再次感謝您。我猜左邊的連接方法比使用子選擇更好,因爲我建議? –

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值的完整列表。在回答我自己的問題時,這種方法比首先放入數組更快,我相信這是正確的方法。

+0

讓我建議你提出另一個問題,提供表結構和期望的結果。雖然你不需要子選擇。左加入它應該是。 –

+0

我會更加清楚地嘗試..我有一個名爲製造商與ID,製造商,細節,圖像我有一個產品表有幾列,但1被稱爲製造商。我想列出所有制造商和ID與該製造商列出的數量的項目。有些製造商可能沒有列出任何物品。所以這個名單將包括id製造商和數量。 –