【问题标题】:PHP - Too many mysql_query("SELECT .. ") ..?PHP - 太多 mysql_query("SELECT .. ") ..?
【发布时间】:2009-10-04 17:21:28
【问题描述】:

嘿,我正在创建一个电子商店,并在一个页面上显示类别树和所有产品及其多种价格变化,例如超过 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 )) { }

谢谢,迈克。

【问题讨论】:

    标签: php select mysql


    【解决方案1】:

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

    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 您也可以按produkt_id 排序,然后按gramaz 排序,以与多个查询相同的顺序获得结果。
    【解决方案2】:

    您的情况似乎迫切需要加入,如果您真的想减少该页面的负载,可能还需要一些 AJAX。

    如果我的理解正确,您希望显示类别的树形菜单,并且大概当您单击打开特定分支时,您会看到属于该类别的项目,对吗?

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多