如何从三个表创建嵌套列表?

时间:2013-10-24 03:40:52

标签: php mysql algorithm

我有三张如下表:

[Category]->[SubCategory]->[Leaf]

-> means one-to-many relation;

是否可以只使用一个查询创建嵌套列表?

实际查询:

Select * from Category
join SubCategory
join Leaf

预期输出:

Category
--Subcategory
----Leaf
----Leaf
--Subcategory
----Leaf
----Leaf

我了解复合设计模式;但是让我说我​​有查询的结果集,我想以最小的尝试操纵上面的列表。

更新

我的问题是没有for循环和子查询,可以使用上面的一个查询完成,或者从三个表生成3个嵌套列表的最佳方法是什么?

更新

从任何数据库和任何语言的三个表创建上述嵌套列表的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

使用此查询:

SELECT * 
FROM Category c
JOIN SubCategory s ON s.CategoryID = c.ID
JOIN Leaf l ON l.SubCategoryID = s.ID
ORDER BY c.ID, s.ID, l.ID

然后在PHP循环中,每当更改时打印类别名称,每当更改时打印SubCategory名称,并打印每个Leaf名称。

$last_cat = null;
while ($row = fetch()) {
    if ($row['CategoryName'] !== $last_cat) {
        echo $row['CategoryName'] . "\n";
        $last_cat = $row['CategoryName'];
        $last_subcat = null;
    }
    if ($row['SubCategoryName'] != $last_subcat) {
        echo "--{$row['SubCategoryName']}\n";
        $last_subcat = $row['SubCategoryName'];
    }
    echo "----{$row['LeafName']\n";
}