2009-10-04 30 views
1

嘿,我正在做一個電子商店,並顯示類別的樹和所有產品與他們的價格的多種變化我做了超過150 mysql_query("SELECT ...");查詢在一個頁面上。 (如果我計算「while」循環)。PHP - 太多的mysql_query(「SELECT ..」)..?

它太多了,如果是的話,它會有什麼負面影響? (OFC。它需要更長的時間來加載數據。)

也可我無論如何實現這個代碼的效果沒有做這樣的說法?

$result2 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result3 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result4 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 
$result5 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz"); 

while($row2 = mysql_fetch_array($result2)) { } 
while($row3 = mysql_fetch_array($result2)) { } 
while($row4 = mysql_fetch_array($result2)) { } 
while($row5 = mysql_fetch_array($result2)) { } 

謝謝,邁克。

回答

13

通常減少查詢的數量是一個好主意。在這種情況下,你可以在一個單一的查詢選擇的所有產品行,例如:

SELECT * FROM ceny WHERE produkt_id IN (?, ?, ?, ...) ORDER BY gramaz 

然後,你將有一個循環,對結果進行迭代,並填入相應的變量(S):

$ceny = array() 
while ($row = mysql_fetch_array($result)) { 
    $id = $row['produkt_id']; 
    $ceny[$id][] = $row; 
} 

現在$ceny[$produkt_id]包含ceny該產品,通過gramaz排序行的列表。

+0

+1此外,您可以通過'produkt_id'然後按'gramaz'命令以與多次查詢相同的順序獲得結果。 – 2009-10-04 21:51:11

0

看來你的情況是在聯接迫切需要,可能還有一些AJAX,如果你真的想減少負載該頁面。

如果我正確認識你,你要顯示的類別樹菜單,想必當你點擊打開一個特定的分支,你看哪個歸入這一類的項目,是否正確?

所以,你目前的做法是遍歷的分類,然後做一個SELECT * FROM items表給他們看,對不對?

如果是這種情況,並且我正確地理解它,可以使用簡單的連接來解決這個問題。您需要對items表執行單個select語句,通過items表中的外鍵連接到categories表,然後按類別排序。現在

,你可以遍歷一個結果集同時顯示的類別和相關的項目。