2013-08-09 2 views
1

나는 2 개의 카테고리 시스템을 가지고 있는데, 기본적으로 내가 원하는 것은 2 개의 테이블, top_category와 bottom_category이다. SQL 쿼리를 사용하여 모든 제품을 나열 할 사이드 바를 만들었다. 거기에 하나의 SQL 쿼리에서 top_category 및 bottom_category 데이터를 가져올 수있는 방법 및 top_category 외래 키 ID에 의해 정렬 된 bottom_category 그래서 내가 목록에 반복 할 때 그들은 바로 둥지에서 끝나는? 여기외부 키 id가 2 테이블에 합류

, 여기

CREATE TABLE top_category (
    id INT PRIMARY KEY, 
    NAME VARCHAR(100) 
); 

CREATE TABLE bottom_category (
    id INT PRIMARY KEY, 
    NAME VARCHAR(100) , 
    top_category_id INT REFERENCES top_category 
); 

그리고 내 테이블입니다 내 제품 테이블, 그래서 나는 bottom_category 링크를 클릭 할 때 나는 그것이 bottom_category_id의에 링크 된 제품 나열 할 :

create table product (
    id int primary key, 
    name varchar(100) , 
    bottom_category_id int references bottom_category 
); 

답변

0

을 당신은 다음과 같이 쓸 수 있습니다

SELECT product.*, bottom_category.name, top_category.name 
FROM product 
LEFT JOIN bottom_category ON bottom_category.id = product.bottom_category_id 
LEFT JOIN top_category ON top_category.id = bottom_category.top_category_id 
ORDER BY top_category.id,bottom_category.id 

그러나 정말로 큰 테이블이 있다면 그냥 잊어 버리십시오. 약 3 번째 정규 양식을 작성하고 카테고리 이름을 제품 테이블에 추가하십시오. 그러나 에만 카테고리가있는 큰 테이블이있는 경우.

UPD 는 약 12K 제품을

+0

ORDER BY 기본적으로 내가 다음 하위 카테고리가 약 50 ~ 100입니다, 약 30 종류의 상단 카테고리를 추가합니다. 또한이 탐색을 CRUD 할 수있는 백엔드를 가질 수 있어야합니다. – thechrishaddad

+0

그러면 위의 SQL에는 문제가 없습니다. 정보 : 'LEFT'을 'INNER'로 변경하면 하단 및 상단 카테고리가있는 제품 만 검색됩니다. 'LEFT'의 경우'bottom_category.name'과'top_category.name'에'NULL'을 찾을 수 있습니다 –

+0

이것은 아무것도 표시하지 않지만 쿼리는 작동합니다. pdo 쿼리의 어떤 데이터가 출력됩니까? – thechrishaddad

0
select p.*, 
     bc.name bc_name, 
     tc.name tc_name 
from product p 
left join bottom_category bc on p.bottom_category_id=bc.id 
left join top_category tc on bc.top_category_id=tc.id 
order by tc.id,bc.id