ホームページ >データベース >mysql チュートリアル >PHP を使用して MySQL の親のすべての子ノードと子孫ノードを取得する方法は?
この記事では、すべての子ノードと子孫ノードを取得する方法について説明します。 PHP と MySQL クエリ結果を使用して、指定された親に対して。この手法により、ツリー構造の多次元配列を構築する必要がなくなり、すべてのノードを直接取得できるようになります。
隣接リストとして編成された MySQL テーブルを考えてみましょう。階層データは ID、名前の列で表されます。 、およびparent_id。次の SQL クエリは、このテーブルのすべての行を連想配列に取得できます:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
ID 3 の親の下にあるノード (親自体も含む) の配列をフィルター処理するとします。このカスタム fetch_recursive 関数は次のことを実現できます。
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
この関数を使用するには、クエリから取得した $data 配列を最初の引数として渡し、子ノードを取得する親の ID を次の引数として渡します。 2 番目の引数:
$list = fetch_recursive($data, 3);
$list には、すべての子ノードと親ノード (id 3) が含まれる連想配列が含まれます。
このソリューションは、すべての子ノードと子孫ノードを効率的に取得します。多次元ツリー構造の構築を必要とせずに、指定された親に対して。
以上がPHP を使用して MySQL の親のすべての子ノードと子孫ノードを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。