>  기사  >  데이터 베이스  >  데이터베이스 결과를 계층적 배열 개체로 변환하는 방법은 무엇입니까?

데이터베이스 결과를 계층적 배열 개체로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-06 17:04:03649검색

How to Convert Database Results into Hierarchical Array Objects?

데이터베이스 결과를 계층적 배열 객체로 변환

클로저 테이블 기반 계층 구현

계층 데이터를 효율적으로 표현하려면 클로저 테이블을 사용하는 것이 좋습니다. 이러한 맥락에서 클로저 테이블은 트리 구조의 상위 항목과 하위 항목 간의 관계를 유지하므로 계층 구조를 효율적으로 검색하고 표시할 수 있습니다.

계층 데이터 쿼리

트리 구조를 쿼리하려면 계층 구조의 해당 수준과 함께 특정 노드의 하위 항목을 검색하는 SQL 쿼리를 실행할 수 있습니다. 다음은 지정된 수준까지 하위 항목을 검색하는 쿼리 예시입니다.

SELECT d.*, p.a AS '_parent'
FROM longnames AS a
JOIN closure AS c ON (c.a = a.tsn)
JOIN longnames AS d ON (c.d = d.tsn)
LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1)
WHERE a.tsn = ? AND c.l <= ?
ORDER BY c.l;

쿼리 결과 처리

쿼리 결과가 검색되면 이를 처리하여 계층적 배열 구조를 생성할 수 있습니다. 여기에는 계층별로 행을 정렬하고 그에 따라 그룹화하여 데이터 및 하위 배열이 모두 포함된 개체로 노드가 있는 배열을 생성하는 작업이 포함됩니다.

사용자 정의 행 개체

배열 구조를 향상하기 위해 다음을 만들 수 있습니다. 행 데이터의 연관 배열과 해당 하위 항목에 대한 Rowset 개체를 포함하는 사용자 정의 Row 개체입니다. 리프 노드의 하위 Rowset은 비어 있습니다.

toArrayDeep() 메서드

사용자 정의 클래스에는 데이터 콘텐츠를 일반 배열로 재귀적으로 변환하여 쉽게 데이터를 내보낼 수 있는 toArrayDeep()와 같은 메서드도 포함될 수 있습니다. .

사용 예

이 시스템을 사용하려면 먼저 분류표 데이터 게이트웨이의 인스턴스를 얻은 다음 원하는 트리 구조를 가져올 수 있습니다.

// Get an instance of the taxonomy table data gateway
$tax = new Taxonomy();

// Query tree starting at Rodentia (id 180130), to a depth of 2
$tree = $tax->fetchTree(180130, 2);

// Dump out the array
var_export($tree->toArrayDeep());

추가 참고

각 경로의 깊이를 결정하기 위해 클로저 테이블에 새 노드를 삽입하고 계층 구조에 추가된 위치에 따라 적절한 수준을 계산할 수 있습니다. LAST_INSERT_ID() 함수는 새로 삽입된 노드의 ID를 얻는 데 유용할 수 있습니다.

위 내용은 데이터베이스 결과를 계층적 배열 개체로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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