你好,我在delima中
假设我有一个类别中的50个产品,我想获得我的产品的所有功能...
当然SQL连接不会有帮助,因为加入会多次返回产品信息!
所以这就是问题......什么是更好的
计划A
使用一个SQL查询获取所有产品的类别功能,然后使用php迭代每个功能并将其放入产品中。
计划B
对于每个产品,通过调用查询来获取功能
接受其他解决方案!
我的表架构大纲是..
表产品有产品信息(每行)
具有特征(特征id)的桌子特征
功能值的表格
还有一个包含产品及其功能和值的表
答案 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查询很有可能解决您的问题。