好的,我有这个 page正如您所看到的,我正在记录12种产品的数组。如果向下滚动,您可以看到我需要按类别名称对它们进行分组的要求,但我不确定构建循环的最佳方法。
my query
$query = "SELECT p.name, p.price, pc.quantity, p.image, p.descr, t.name as Category_name
FROM products as p
join categorizations as pc on p.id = pc.product_id
join categories as c on c.id = pc.category_id
JOIN types AS t on t.id = p.type_id
WHERE c.code = '{$type}_{$count}'
order by p.order desc";
$allproducts = array();
while($row_r = mysql_fetch_assoc($result)){
$allproducts[] = $row_r;
}
也许我需要更改我的查询或按类别名称分组,但这可能会丢弃一些产品。也许我可以创建一个多维数组并循环每个类别名称
任何建议
答案 0 :(得分:3)
如果您更改阵列线,
while($row_r = mysql_fetch_assoc($result)){
$allproducts[] = $row_r;
}
到
while($row_r = mysql_fetch_assoc($result)){
$allproducts[$row_r['Category_name']][$row_r['name']] = $row_r;
}
您将自动按类别对项目进行分组,具体取决于您之后如何使用这些信息。
如果您希望整理阵列,减少阵列的内存占用,可以将这些行添加到循环中:
unset($allproducts[$row_r['Category_name']][$row_r['name']]['Category_name']);
unset($allproducts[$row_r['Category_name']][$row_r['name']]['name']);
如果这看起来很复杂或令人困惑,我通常会使用OBJECT。
while($row_r = mysql_fetch_object($result)){
$allproducts[$row_r->Category_name][$row_r->name] = $row_r;
unset($allproducts[$row_r->Category_name][$row_r->name]['Category_name']);
unset($allproducts[$row_r->Category_name][$row_r->name]['name']);
}
答案 1 :(得分:0)
你拉的那些中有一个独特的专栏吗?如果是这样,您可以对GROUP_name和它进行GROUP BY,它会将类别组合在一起但避免丢失任何行。然后,您可以按类别组织数据,这将更容易循环,数据库为您完成了大部分组织工作。
如果您没有唯一的列,那么添加主键列不会有太大影响。在这种情况下,您的GROUP BY可能看起来像:
GROUP BY Category_name, p.id