2011-09-27 5 views
0

데이터베이스가 여러 개 있습니다. 예를 들어 간단히 설명하고 자세히 설명하려고합니다.MySQL : 여러 테이블에서 DISTINCT 선택

하나의 표를 제품이라고하며, 또 다른 표를 브랜드라고하며, 마지막 표를 카테고리라고합니다.

짐작할 수 있듯이 각 제품에는 하나의 카테고리 만 할당 할 수 있습니다. 또한 각 제품에는 하나의 브랜드 만 할당 할 수 있습니다. 이것들이 관계입니다.

그래서 한 페이지에는 특정 브랜드의 모든 제품을 나열하는 세부 정보 페이지로 전달하는 매개 변수로 브랜드와 링크되어 있습니다. 해당 페이지에서 해당 필터로 선택된 브랜드의 제품 만 필터링하는 범주 별 필터도 있습니다.

예. 소니 -> 그 다음 드롭 다운에서 적용된 필터는 dSLR -> Sony 브랜드 dSLR 카메라 제품의 결과입니다.

내가 원하는 것은 브랜드에 특정 카테고리가 있으면 해당 드롭 다운 필터에 표시되지 않도록 해당 카테고리를 필터링해야한다는 것입니다.

예. 카테고리는 다음과 같이 미리 정의되어 있습니다. dSLR, 비디오, 휴대 전화, 신발

소니는 제품이 많지만 신발을 만들지 않으므로 세부 정보 페이지의 해당 필터 목록에서 제외하고 싶습니다.

는 어떤 제안은 환영보다 :)

답변

1

음에 인덱스를 생성하여 속도를 높일 수 있습니다, 당신과 같이 세 개의 테이블을 조인 할 수 있어야한다

SELECT p.product_id, p.product_name 
FROM products p 
JOIN categories c ON p.category_id = c.category_id 
JOIN brands b ON p.brand_id = b.brand_id 
WHERE b.brand_name='Sony' AND c.category_id='1234'; 

danishgoel이 이미 언급했듯이 테이블에 적절한 인덱스가 있는지 확인하는 것은 꽤 비싼 쿼리이기 때문에 가능합니다.

+0

감사합니다. – user966456

0

한 가지 방법은 특정 브랜드의 제품과 구별 범주의 목록을 선택하는 것입니다 더

... 당신은 내가 여기에 원하는 것을 이해 바랍니다.

당신은 좋아하는 수행 할 수 있습니다

SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony' 

이제 위의 쿼리는 각 페이지 요청에서 실행 속도가 느린 조금 수 있습니다 sony 제품

에 사용할 수있는 범주 만이있다.

SELECT DISTINCT c.category_id, c.category_name 
FROM products p 
JOIN categories c ON p.category_id = c.category_id 
JOIN brands b ON p.brand_id = b.brand_id 
WHERE b.brand_name='Sony'; 

을 다음과 같이 제품 표시 : 당신은 brand_id, cat_id

+0

어쩌면 나는 충분히 명확하지 않았다. 필터 드롭 다운 상자를 채울 sql 쿼리가 필요합니다. 카테고리 -> cat_id, cat_name 그래서 드롭 다운 목록을 채우고 드롭 다운을 선택하면 일부 카테고리별로 필터링 된 Sony 브랜드가 표시됩니다 ... – user966456

관련 문제