【问题标题】:SQL queries or php code?SQL 查询或 php 代码?
【发布时间】:2011-05-11 09:01:58
【问题描述】:

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

所以问题来了..什么更好
A计划
通过一个 SQL 查询获取类别中所有产品的特性,然后用 php 迭代每个特性并将其放入 Product 中。

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

接受其他解决方案!

编辑

我的表架构大纲是..
具有产品信息的表产品(每行)
具有特征的表特征(特征 id)
特征值表
还有一张表,其中包含产品及其特性和价值

【问题讨论】:

  • 您应该在您的架构上发布更多信息。你的桌子是如何组织的?
  • 是的,请使用您的架构更新您的问题。联接实际上可能很有用,具体取决于数据的组织方式以及您试图从数据中获取的具体内容。

标签: php sql optimization


【解决方案1】:
$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 以便更多的工作。您可以使用不同的键/值(即 - 产品名称作为键。特征名称作为键,特征值作为值,无论您想要什么),但关键是在一个查询中这是可行的(并且推荐)。

【讨论】:

  • 感谢您抽出宝贵时间.. 有一个额外的表用于功能 VALUES.. 如果我需要单独查询,您能告诉我吗?再次感谢
  • 不,您仍然不只是再加入一次我不太确定您的表格是什么样的,但我对您的产品到功能到功能值表的印象是不必要的(如果是这样的话)。产品和特征值之间应该是多对多的。特征值是一种特征的实例。 (即 - 特征“风味”特征值“草莓”)。查询完成后,只需以类似的方式将新值添加到#arr。您可能希望每个功能都成为其各自价值的关键
【解决方案2】:

不是 B 计划。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多