2010-12-10 3 views
0

내가 지금은이 같은 결과를 얻으려면이sql은 계층 구조 기본 테이블의 마지막 노드를 가져 옵니까?

id = 1, parent = 0 
id = 2, parent = 1 
id = 3, parent = 1 
id = 4, parent = 1 

id = 5, parent = 0 
id = 6, parent = 5 
id = 7, parent = 5 
id = 8, parent = 5 

id = 9, parent = 0 

같은 테이블 데이터를 가지고, 내가이 작업을 수행 할 수있는 방법 트리 의 최신 노드?

id = 4, parent = 1 
id = 8, parent = 5 
id =9, parent = 0 

EDIT 1 : 루트 노드의 parent_id = id를 어떻게 설정합니까? 부모님 아이디로 그룹화 할 수 있습니다. 나는 이것이 루트 노드 (의미, 더 이상 내가 parent_id = 0을 쿼리 할 필요가 없으며, id = parent_id를해야한다는 의미)를 얻을 필요가있을 때 미래에 문제를 일으킬까 걱정된다.

+0

MySQL에는 계층 적 함수가 없습니다. –

+0

네,하지만 계층 적 함수를 사용하지 않고도 일반 sql을 사용하면 결과를 얻을 수 있어야합니다. – Aman

답변

0

높은 ID를 가진 노드가 "나중에"입니다 그때는 단지이라고 가정 : 루트 노드로

select max(id), parent from tree group by parent; 

, 반드시이 먼저 삽입되어야 할 것이다, 그래서 1 또는 0과 같은 알려진 ID를 가질 것 , 또는 NULL 또는 -1과 같은 특수한 부모 ID를 가질 수 있습니다.

+0

고맙습니다. 정확한 결과를 제공합니다. 4,8,9. 하지만 약간의 변경 데이터가 위의 예제에서와 같이 id 1, 2, 3, 4와 같은 데이터 만 가지고 있다고 가정합니다. 그것은 1과 4 모두를 보여줍니다. 나에게 네가 맞았어야 했어? 이 SQL을 조정하려면 무엇이 필요합니까? – Aman

+0

1은 가장 최근에 추가 된 0의 자녀이고 4는 가장 최근의 1의 자녀이므로 맞습니다. 그렇지 않습니까? – Martin

+0

int 마지막으로 parent = id 더 이상 parent (0)가 아니고 example : new 행이 id = 1이면 부모 = 1뿐 아니라 sql이 내가 뭘 찾고 있는지를 알려주었습니다. – Aman