>데이터 베이스 >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?

MySQL 쿼리 결과와 함께 PHP를 사용하여 상위 노드 아래의 모든 하위, 손자 등 노드 가져오기

이 문서에서는 모든 하위 노드와 하위 노드를 검색하는 방법을 안내합니다. MySQL 쿼리 결과와 함께 PHP를 사용하여 지정된 상위 항목에 대해 이 기술을 사용하면 트리 구조의 다차원 배열을 구성할 필요가 없으며 모든 노드를 직접 얻을 수 있습니다.

계층 데이터가 ID, 이름 열로 표시되는 인접 목록으로 구성된 MySQL 테이블을 생각해 보세요. 및 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를 다음과 같이 전달합니다. 두 번째 인수:

$list = fetch_recursive($data, 3);

$list에는 이제 모든 하위 노드와 상위 노드(ID 3)가 포함된 연관 배열이 포함됩니다.

이 솔루션은 모든 하위 노드와 하위 노드를 효율적으로 검색합니다. 다차원 트리 구조 구성이 필요 없이 지정된 상위에 대해.

위 내용은 PHP를 사용하여 MySQL에서 부모의 모든 자식 및 하위 노드를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.