2012-05-03 2 views
2

"category"라는 mysql 테이블이 있습니다. this-mysql에서 하나의 쿼리로 하위 카테고리의 상위 이름을 가져 오는 중

------  --------  ------ 
cat_id  cat_name  parent 
------  --------  ------ 
1   test1  NULL 
2   test2  NULL 
3   test3  2 
4   test4  1 
5   test5  3 

지금 내가 단일 쿼리에서 상위 범주 이름 (뿐만 아니라 ID)와 모든 종류의 데이터를 원하는 같은 기본 구조가 보인다. 그게 가능하니? while 루프에서 두 번째 쿼리 (자식의 부모 이름 가져 오기)를 사용하고 전체적으로 데이터를 병합하면됩니다. 단일 쿼리로이 작업을 수행 할 수 있습니까?

+0

질문이 모호합니다. 모든 카테고리 데이터와 상위 카테고리 이름을 선택 하시겠습니까? 아니면 (검색된) 상위 카테고리 이름이있는 모든 카테고리 데이터를 선택 하시겠습니까? – Konerak

+0

2 가지가 동일합니다. 그렇지 않습니다. –

답변

6

parent 열을 사용하여 부모의 cat_id에 연결하는 자체 테이블에 가입하십시오.

SELECT c1.cat_id as childID, c1.cat_name ChildName, c2.cat_name as ParentName 
from category c1 
LEFT OUTER JOIN category c2 
ON c1.parent = c2.cat_id 
  • 하는 것은주의 : 일부 요소가 더 부모 (NULL)가 없기 때문에, 내가 지금 그 행이도 표시됩니다 LEFT OUTER JOIN을 넣어. 을 원하지 않으면 LEFT OUTER JOIN 대신 JOIN을 사용하십시오.
  • COALESCE을 사용하여 줄을 표시 할 수도 있지만 NULL 대신 다른 내용 (공백 또는 텍스트 또는 ...)을 표시 할 수 있습니다.
  • 당신은 한 (큰) 새 테이블로 결과를 고려할 수 있습니다, 그래서 당신이 일반적으로하는 것처럼 당신은 부모 이름을 필터링 예를 들어, WHERE 절을 추가 할 수 있습니다 WHERE c2.cat_name = 'test2'
+0

이것은 굉장합니다. 고마워. 유용한 팁도 있습니다. –

0
Select p.cat_id, p.cat_name, c.cat_id, c.cat_name, c.parent 
From category Left Join category On p.cat_id = c.parent 
Where p.cat_name = 'name' 
0

SELECT (C1)을. category_name AS 범주, c2. (SELECT는 category * FROM

) C1 AS INNER JOIN을 FROM category_name AS sub_category (

SELECT * category FROM) C1 C2 ON AS. category_id = c2. category_id

관련 문제