0

我有如下三个表:

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

-> means one-to-many relation;

是否可以只用一个查询来制作嵌套列表?

实际查询:

Select * from Category
join SubCategory
join Leaf

预期输出:

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

我知道复合设计模式;但是可以说我有查询的结果集,我想以最少的尝试操作上面的列表。

更新

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

更新

从任何数据库和任何语言中的三个表创建像上面这样的嵌套列表的最优化方法是什么?

4

1 回答 1

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 循环中,每当类别名称发生变化时打印它,在它发生变化时打印子类别名称,并打印每个叶子名称。

$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";
}
于 2013-10-24T03:48:25.053 回答