从MySQL数据库中列出PHP中的类别,然后列出子类别
我一直在做一个项目,以建立一个简单的电子商务系统,一直很好,直到我开始工作显示类别导航 当我在MySQL中构建类别时,我有如下内容:从MySQL数据库中列出PHP中的类别,然后列出子类别,php,mysql,categories,Php,Mysql,Categories,我一直在做一个项目,以建立一个简单的电子商务系统,一直很好,直到我开始工作显示类别导航 当我在MySQL中构建类别时,我有如下内容: id name parent_id 1 books null 2 art 1 3 biography 1 4 games null
id name parent_id
1 books null
2 art 1
3 biography 1
4 games null
5 electronics null
6 FPS 4
我编写了以下SQL来检索父类别,然后检索子类别:
SELECT parent.name AS parent_name, child1.name AS child1_name
FROM categories AS parent
LEFT OUTER JOIN categories AS child1 ON child1.parent_id = parent.id
WHERE parent.parent_id IS NULL
ORDER BY parent_name, child1_name
结果是一个包含多个数组的数组:
Array
(
[0] => Array
(
[parent_name] => Books
[child1_name] => Art
)
[1] => Array
(
[parent_name] => Books
[child1_name] => Biography
)
[2] => Array
(
[parent_name] => Clothes, Shoes & Watches
[child1_name] =>
)
[3] => Array
(
[parent_name] => Computers & Office
[child1_name] =>
)
[4] => Array
(
[parent_name] => Electronics
[child1_name] =>
)
)
我无法将此信息显示为无序列表。预期效果如下:
<ul>
<li>Books
<ul>
<li>Art</li>
<li>Biography</li>
</ul>
</li>
<li>Computers</li>
<li>Electronics</li>
</ul>
- 书
- 艺术
- 传记
- 计算机
- 电子学
有人能解决这个问题吗?我是否需要更改MySQL代码甚至数据库结构
提前感谢。解决方案并不简单,但可以适用于u:)
$newArray=array();
foreach($arrayFromDatabase as$key=>$category){
//更换钥匙
$newArray[$category['parent_name']][=$category['child1_name'];
}
//开放列表
$toEcho=“”;
foreach($newArray作为$name=>$subCat){
如果(!空($subCat)){
$toEcho_=“”;
foreach($subCat作为$cat){
$toEcho.=“- $cat
”;
}
$toEcho_.=“
”;
$toEcho.=“- $name$toEcho
”;
}否则{
$toEcho.=“- $name
”;
}
}
//关闭列表
echo$toEcho。“
”;
你好,Richard,谢谢你的回答。你说得对,这有点复杂,但它工作得很好,所以非常感谢你。
$newArray = array();
foreach($arrayFromDatabase as $key => $category){
//replace key
$newArray[$category['parent_name']][] = $category['child1_name'];
}
//Open list
$toEcho = "<ul>";
foreach($newArray as $name => $subCat){
if(!empty($subCat)){
$toEcho_ = "<ul>";
foreach($subCat as $cat){
$toEcho_ .= "<li>$cat</li>";
}
$toEcho_ .= "</ul>";
$toEcho .= "<li>$name $toEcho_</li>";
} else{
$toEcho .= "<li>$name</li>";
}
}
//Close list
echo $toEcho . "</ul>";