我必须创建一个menù,其中包含按母类别分组的子类别项目列表,并从产品表中获取这些值:
分类
分类
我明白了:
UITouch
<?php
$query_cat = $db->prepare("SELECT * FROM products GROUP BY category ORDER BY category");
$query_cat->execute();
print '<li><strong>'. $category . '</strong></li>'; //Category
while ($cat_row = $query_cat->fetch()) { //Subcategory
print '<li><a href="/category/'. $cat_row['4'] .'">'. $cat_row['4'] .'</a></li>';
}
?>
表结构是
products
我如何获得类别名称并放在元素的顶部?
感谢所有人提供的帮助。
答案 0 :(得分:1)
您可以使用array_group_by功能,如下所示
$query_cat = $db->prepare("SELECT name, category, first_category FROM products ORDER BY category");
$query_cat->execute();
$rows = $query_cat->fetchAll(PDO::FETCH_ASSOC);
$items = array_group_by($rows, 'first_category');
foreach($items as $key => $value) {
echo '<li><strong>' . $key . '</strong></li>';
foreach($value as $row) {
echo '<li><a href="/category/'.$row['category'].'">'.$row['category'].'</a></li>';
}
}
array_group_by
是一个函数,它通过在所有数组成员之间共享的一个键或一组键对数组进行分组。
一旦您将SQL数据检索为关联数组,就可以应用array_group_by
函数获取一个数组数组,例如类别和子类别。
在array_group_by
之后,这是$items
数组的结构https://3v4l.org/5WkDH的结果示例
此处的最终实例https://3v4l.org/cg9NN
提示 Why is SELECT * considered harmful?请考虑在查询中不使用SELECT * FROM
编辑如果您希望兼容 PHP低于5.3 ,则只需使用[]
短数组表示法更改array()
。这里的实例https://3v4l.org/0VUn7 (从PHP 4.3到最新测试)