ホームページ >データベース >mysql チュートリアル >単一のクエリで MySQL データベースから再帰的なカテゴリを取得するにはどうすればよいですか?

単一のクエリで MySQL データベースから再帰的なカテゴリを取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 10:50:01740ブラウズ

How to Retrieve Recursive Categories from a MySQL Database with a Single Query?

単一の MySQL クエリによる再帰的カテゴリの取得

Web サイトのコンテンツを整理するというコンテキストでは、再帰的カテゴリにより複数レベルの階層構造が可能になります。このようなカテゴリを MySQL データベースから効率的に取得するには、通常、単一のクエリが使用されます。

MySQL は、データの再帰的選択を可能にする CONNECT_BY_ROOT 演算子を提供します。次のクエリについて考えてみましょう。

SELECT category_id, name, parent
FROM categories
CONNECT BY ROOT parent
ORDER BY LEVEL

このクエリは、テーブル内のすべてのカテゴリを取得し、親列に基づいて階層的にそれらを接続します。 LEVEL 関数は、各行にレベルを割り当て、階層内での位置を示します。最上位カテゴリのレベルは 1 です。

PHP で再帰ツリー構造を構築するには、クエリ結果を次の形式に変換します。配列。各カテゴリは、children プロパティを持つノードとして表されます。次の例は、このプロセスを示しています。

$nodeList = [];
$tree = [];

$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while ($row = mysql_fetch_assoc($query)) {
    $nodeList[$row['category_id']] = array_merge($row, ['children' => []]);
}

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

// Return the tree structure
return $tree;

この PHP コードは、カテゴリ間の階層関係を反映する多次元配列を構築します。最上位のカテゴリは $tree 配列に配置され、その子はそれぞれの子配列内にネストされます。

このアプローチではノードへの参照を利用するため、新しいノード オブジェクトを作成する場合と比較してメモリ使用量が最小限に抑えられます。また、再帰的な SQL クエリを回避し、大規模なツリー構造の効率を高めます。

以上が単一のクエリで MySQL データベースから再帰的なカテゴリを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。