2009-10-04 48 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表,然后按类别排序。现在

,你可以遍历一个结果集同时显示的类别和相关的项目。