SQL查询还是php代码?

时间:2010-11-22 04:06:13

标签: php sql optimization

你好,我在delima中 假设我有一个类别中的50个产品,我想获得我的产品的所有功能...
当然SQL连接不会有帮助,因为加入会多次返回产品信息!

所以这就是问题......什么是更好的 计划A
使用一个SQL查询获取所有产品的类别功能,然后使用php迭代每个功能并将其放入产品中。

计划B
对于每个产品,通过调用查询来获取功能

接受其他解决方案!

修改

我的表架构大纲是..
表产品有产品信息(每行)
具有特征(特征id)的桌子特征 功能值的表格 还有一个包含产品及其功能和值的表

4 个答案:

答案 0 :(得分:2)

不是B计划。

无论你做什么,这都可以而且应该用一个或最多两个总查询来完成(一个用于标题,一个用于正确排序的特征列表+ id列)。该查询是计划A还是某些未提及的计划C取决于您的确切表格结构,这在您的问题中并不清楚。

答案 1 :(得分:2)

$sql1 = "SELECT * FROM products P,  ". //don't use star, make sure no fields are overwritten
         INNER JOIN products_to_features PTF on P.id = PTF.project_id
         INNER JOIN features F F.id = PTF.feature_id
         ORDER BY P.id";
$r = mysql_query($sql1, $conn);

$arr = array();
$lastProductId = -1;
while ($row = mysql_fetch_assoc($r))
{
   if ($row[p_id] != $lastProductId)
   {
       $lastProductId = $row['p_id'];
       $arr['p_id'] = array('productName' => $row['p_name'], 
                            'productPrice' = $row['p_price'],
                            'productFeatures' = array(),
                             //other fields from product table);
   }
   $arr['p_id']['productFeatures']['f_id'] = array('featureName' => $row['f_name'], blah...);
}

我显然不了解您的字段,您可能希望加入feature_values以便更多工作。你可以做不同的键/值(即 - 产品名称作为键。功能名称作为键,功能值作为值,无论你想要什么),但重点是这在一个查询中是可行的(并推荐)。

答案 2 :(得分:0)

通常,您必须进行的数据库查询越少越好。这在很大程度上取决于你的表结构,但我会选择Plan A.

答案 3 :(得分:0)

循环内的查询将极大地降低应用程序的性能。不惜一切代价避免它。

向我们展示架构。单个SQL查询很有可能解决您的问题。