2012-05-14 6 views
0

좋아 I는 다음과 같습니다 테이블라는 범주 그래서 :MYSQL 반환 부모 및 자녀

id  name  parent_id 
1  camera null 
2  computer null 
3  digital 1 
4  gps  null 
5  laptop 2 

내가 컴퓨터를 복원 할 수 있도록하려면를 -> 노트북이나 카메라 - 나는 쿼리> 디지털 ID = 3 또는 5

아이디어가 있으십니까?

답변

0

자체를 사용하여 왼쪽 조인 쿼리 위

select a.name, b.name as parent_name from categories a left join categories b on a.parent_id = b.id where a.id in (3,5);

가 한 레벨을 얻기를위한 유효을 부모의 전체 혈통을 훑어보고 싶다면 다음 링크를 참조하십시오.

내 모든 CS 강의가 다시 범람하는

http://jan.kneschke.de/projects/mysql/sp/

2

해당 Structurs에는 Nestedsets을 시도하십시오. 선택하기에 매우 좋은 성능을 가지고 있지만, 불량 쓰기 성능. 따라서 테이블에 삽입 또는 업데이트 (구조 업데이트)를 선택하면 중첩 된 집합을 사용하는 것이 좋습니다. > 하위 - - 중첩와

Breadcrumps 카테고리 1을 얻기 위해 설정>는 열 수를 고정 않다면 하위 카테고리

+0

: 그들은 가로 지르는 나무 아래 몇 가지 표준 방법을 나열했습니다! 구조가 2 개 이상의 레벨을 포함한다고 결정하면이를 올바르게 읽고 구현할 수 있습니다. 감사 – nick

0

결과

select p.name, c.name 
mytable c, mytable p 
where c.parent_id = p.id 
and c.id in (3,5) 
0

을 설정 어떻게 사용하려고하는 것은 안티 패턴이다. 계속 사용하면 하위 카테고리의 전체 트리를 선택하려는 경우 몇 가지 문제가 발생할 수 있습니다. 적절한 패턴에 대한 테이크의 대답을보십시오.

0
select t2.name + "->" + t1.name 
from categories t1 
inner join t2 on t1.id = t2.parent_id 
where t1.id in (3, 5) 
0

당신은 단지 부모의 한 단계가있는 경우 - 자식 참조 :

SELECT IF(p.name IS NOT NULL, p.name + " -> " + a.name, a.name) AS name 
FROM categories a 
LEFT JOIN categories p ON a.parent_id = p.id 
관련 문제