2016-06-17 4 views
0

부모 ID로 그룹화 된 데이터베이스 결과를 토출하고 싶습니다.단일 열로 그룹화 된 쿼리

`pages` 
    `id` int 
    `parent_id` int 
    `title` varchar 

pages 중 일부는 그들이 부모가없는 의미하는 parent_id 공의가 있습니다

나는 다음과 같은 테이블이 있습니다.

내가 pages 테이블의 다음 행이 있다고 가정하자 :

id | parent_id | title 
1 | 0   | Colors 
2 | 1   | Red 
3 | 1   | Green 
4 | 1   | Blue 
5 | 0   | Devices 
6 | 5   | Mobile 
7 | 5   | Desktop 
8 | 5   | Tablet 

이러한 행을 감안할를, 나는 내 PHP 페이지에 다음과 같은 출력하고자 : 내가 아는

Colors 
    Red 
    Green 
    Blue 

Devices 
    Mobile 
    Desktop 
    Tablet 

내가 할 수있는 그 쿼리를 사용하여 parent_id이 0 인 행을 얻은 다음 다른 쿼리를 사용하여 parent_idid 인 행을 가져옵니다.

단일 쿼리로 작성할 수 있습니까?

+0

당신은 또한 두 쿼리를 공유 할 수 있습니다 여기에

는 sqlfiddle 링크입니다? 당신이 원하는 것을 쉽게 이해할 수 있습니까? – C2486

답변

1

그렇습니다. 그러나 계층 적 데이터 구조 (부모/자식)가 있으며, 단일 쿼리에서 그러한 방식으로 정렬하려면 재귀 쿼리가 필요합니다. mysql은이를 지원하지 않습니다.

당신은 당신이 가지고있는 계층 구조의 모든 수준에 대한 자체 조인 수행해야합니다 : 당신의 나무의 모든 수준에 대한

SELECT parent.*, child.* 
FROM yourtable AS parent 
LEFT JOIN yourtable AS child ON parent.id = child.parent_id 

, 위 등의 다른 가입/별칭을해야합니다.

0

나는 다음과 같은 솔루션을 찾고있는 생각 :

SELECT 
    t1.title as parent, t2.title 
FROM 
    pages AS t1 
LEFT JOIN pages AS t2 
    ON t1.id = t2.parent_id 
WHERE 
    t2.id IS NOT NULL 

가 원하는대로 결과를 얻을 것이다 :

parent title 
Colors Red 
Colors Green 
Colors Blue 
Devices Mobile 
Devices Desktop 
Devices Tablet 

지금 당신의 PHP 측에서 그것을 준비해야합니다. http://sqlfiddle.com/#!9/11fa6/3