0

以下のような3つのテーブルがあります。

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

-> means one-to-many relation;

1 つのクエリだけでネストされたリストを作成することは可能ですか?

実際のクエリ:

Select * from Category
join SubCategory
join Leaf

意図した出力:

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

複合設計パターンについて知っています。しかし、クエリからの結果セットがあり、最小限の試行で上記のリストを操作したいとしましょう。

アップデート

私の質問は for ループとサブ クエリなしです。上記の 1 つのクエリで実行できますか、または 3 つのテーブルから上記のような 3 つのネストされたリストを生成する最良の方法は何ですか?

更新

上記のようなネストされたリストを任意のデータベースの任意の言語で 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 に答える