>  기사  >  데이터 베이스  >  단일 쿼리를 사용하여 MySQL 데이터베이스에서 재귀 카테고리를 검색하는 방법은 무엇입니까?

단일 쿼리를 사용하여 MySQL 데이터베이스에서 재귀 카테고리를 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-08 10:50:01694검색

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

단일 MySQL 쿼리로 재귀 카테고리 검색

웹사이트 콘텐츠를 구성하는 맥락에서 재귀 카테고리는 여러 수준의 계층 구조를 허용합니다. MySQL 데이터베이스에서 이러한 범주를 효율적으로 검색하려면 일반적으로 단일 쿼리가 사용됩니다.

MySQL은 CONNECT_BY_ROOT 연산자를 제공하여 데이터를 재귀적으로 선택할 수 있습니다. 다음 쿼리를 고려해 보세요.

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

이 쿼리는 테이블의 모든 범주를 검색하여 상위 열을 기반으로 계층적으로 연결합니다. LEVEL 함수는 각 행에 레벨을 할당하여 계층 내에서의 위치를 ​​나타내며 최상위 카테고리의 레벨은 1입니다.

PHP에서 재귀 트리 구조를 구축하려면 쿼리 결과를 여기서 각 범주는 하위 속성이 있는 노드로 표시됩니다. 다음 예는 프로세스를 보여줍니다.

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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