>  기사  >  데이터 베이스  >  MySQL에서 단일 문장으로 무제한 수준의 부모-자식 관계 쿼리를 구현하는 방법

MySQL에서 단일 문장으로 무제한 수준의 부모-자식 관계 쿼리를 구현하는 방법

jacklove
jacklove원래의
2018-06-15 09:24:184805검색

SQL Server에서는 CTE 표현식을 사용하여 무한한 수준의 부모-자식 관계를 쿼리하는 것이 쉽습니다. CTE 표현식을 지원하지 않는 버전에서는 함수 재귀를 통해서도 쉽게 달성할 수 있습니다.
MySQL에서는 이 요구 사항의 예가 약간 복잡합니다. MySQL에는 재귀를 지원하는 쿼리도 없고, 테이블 반환 함수도 없으며, 함수가 재귀를 지원하지 않기 때문에 일반적으로 루프로 구현되는 것 같습니다. 어색한. 오늘은 단일 문장으로 구현된 재귀 쿼리를 보았는데, 독특한 아이디어가 있어서 공유하고 싶습니다.

권장되는 mysql 관련 동영상 튜토리얼: "mysql tutorial"

테이블 구조 및 데이터

CREATE TABLE table1(id int, name varchar(10), parent_id int); 
INSERT table1 VALUES 
(1, ‘Home’,        0), 
(2, ‘About’,       1), 
(3, ‘Contact’,     1), 
(4, ‘Legal’,         2), 
(5, ‘Privacy’,      4), 
(6, ‘Products’,   1), 
(7, ‘Support’,     2);

ID = 5

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @id as _id, 

        (   SELECT @id := parent_id 

            FROM table1 

            WHERE id = @id 

        ) as _pid, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @id := 5, @l := 0 ) b 

    WHERE @id > 0 
) ID, table1 DATA 
WHERE ID._id = DATA.id 
ORDER BY level;

인 모든 상위 쿼리 방법에 따르면 쿼리를 작성하여 확인하는 것이 쉽습니다. all children Level, 다음 쿼리 id=2 all children

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @ids as _ids, 

        (   SELECT @ids := GROUP_CONCAT(id) 

            FROM table1 

            WHERE FIND_IN_SET(parent_id, @ids) 

        ) as cids, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @ids :=’1’, @l := 0 ) b 

    WHERE @ids IS NOT NULL 
) id, table1 DATA 
WHERE FIND_IN_SET(DATA.id, ID._ids) 
ORDER BY level, id

이 기사에서는 MySQL에서 한 문장으로 무한 수준의 부모-자식 관계 쿼리를 구현하는 방법을 설명합니다. 자세한 내용은 PHP 중국어 웹사이트를 참고하세요.

관련 권장 사항:

진행 상태에서 SQL Server FileStream에 액세스하는 방법

SQL Server 관리자 비밀번호를 잊어버린 경우 수행할 작업

MySQL에서 concat 및 group_concat 사용에 대한 간략한 분석

위 내용은 MySQL에서 단일 문장으로 무제한 수준의 부모-자식 관계 쿼리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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