代码之家  ›  专栏  ›  技术社区  ›  GorillaApe

SQL查询还是PHP代码?

  •  1
  • GorillaApe  · 技术社区  · 15 年前

    你好,我在熟食店
    假设我在一个类别中有50个产品,我想获得我产品的所有特性…
    当然,SQL连接不会有帮助,因为连接会多次返回产品信息!

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

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

    接受其他解决方案!

    编辑

    我的表架构大纲是..
    具有产品信息的表产品(每行)
    具有特征的表特征(特征ID)
    功能值表
    以及一张包含产品及其特征和价值的表

    4 回复  |  直到 15 年前
        1
  •  2
  •   jon_darkstar    15 年前
    $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_值,以便进行更多工作。您可以使用不同的键/值(即产品名称作为键)。feature name作为键,feature value作为值(无论您想要什么),但关键是这在一个查询中是可行的(并且是推荐的)。

        2
  •  2
  •   Joel Coehoorn    15 年前

    不是B计划。

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

        3
  •  0
  •   Alex    15 年前

    一般来说,必须进行的数据库查询越少越好。这很大程度上取决于你的桌子结构,但我会按A计划去。

        4
  •  0
  •   bcosca    15 年前

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

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