ホームページ >データベース >mysql チュートリアル >PHP を使用して MySQL の親のすべての子ノードと子孫ノードを取得する方法は?

PHP を使用して MySQL の親のすべての子ノードと子孫ノードを取得する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-07 02:13:02715ブラウズ

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

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 サイトの他の関連記事を参照してください。

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