PHP - 太多mysql_query(“SELECT ..”)..?

时间:2009-10-04 17:21:28

标签: php select mysql

嘿,我正在制作一个电子商店,并在一个页面上显示类别树和所有产品及其多种价格变化,就像超过150个mysql_query("SELECT ...");查询一样。 (如果算上“while”循环)。

是否太多,如果是,它会产生任何负面影响吗? (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 )) { }

谢谢,迈克。

2 个答案:

答案 0 :(得分:13)

减少运行的查询数量通常是个好主意。在这种情况下,您可以在单个查询中选择所有产品的行,例如:

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

然后你会有一个循环遍历结果并填充相应的变量:

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

现在$ceny[$produkt_id]包含ceny针对该产品的行列表,按gramaz排序。

答案 1 :(得分:0)

看起来你的情况迫切需要一个连接,如果你真的想减少该页面的负载,可能需要一些AJAX。

如果我正确理解你,你想要显示一个类别的树状菜单,大概是当你点击打开一个特定的分支时,你会看到属于该类别的项目,对吗?

所以,你当前的方法是遍历类别,然后从items表中选择*来显示它们,对吗?

如果是这种情况,并且我正确理解它,可以使用简单的连接来解决。您可能希望对items表执行单个select语句,通过items表中的外键连接到categories表,然后按类别排序。

现在,您可以遍历单个结果集以显示类别和相关项目。