2011-06-11 3 views
1

나는 이런 식으로 구조화 된 DB를 가지고 있습니다.제품에 CATEGORIES 만 선택하여 검색어를 만들려면 어떻게해야합니까?

CATEGORIES > SUBCATEGORIES > PRODUCTS 

단지 관련 제품 수가 많은 범주를 보여주고 싶지만 내 방법이 최선인지 여부는 모르겠습니다. 첫 번째 WHERE 내부에 SELECT 문을 넣을 생각이지만, "unpratical"소리. Google/MySQl 문서를 검색했지만 아무 도움도받지 못했습니다.

CATEGORIES> SUBCATEGORIES의 예 :

SELECT c.* 
FROM categories c 
WHERE 
(
    SELECT count(*) 
    FROM subcategories sc 
    WHERE sc.id_categories = c.id 
) > 2 

이 쿼리를 사용하면 어떤 범주에 관련 하위 범주가 두 개 이상 있는지 확인할 수 있습니다. 표를이 쿼리에 추가하십시오. 그러나 이것이 거의 질의를 늦출 것이라고 확신합니다. 이 유형의 쿼리를 수행하는 더 빠른 방법이 있습니다. 고마워!

+1

실제 응답을 받으려면 실제로 구조를 게시 할 수 있습니까? –

답변

2

뭔가, 나는 당신의 FK 관계를 모르는, 그래서 난 그냥 여기 추측하고있어 :
다음은 아마 더 빠르게 작동합니다.

SELECT * 
FROM Categories 
WHERE EXISTS(
    SELECT NULL 
    FROM products 
    JOIN SubCategories ON products.fkSubCatID = SubCategories.PkSubCatID 
    WHERE SubCategories.fkCatID = Categories.pkCatID 
    HAVING Count(*) > 2) 
2

하위 선택은 이러한 목적으로 설계되었습니다.

SELECT * FROM categories 
WHERE 
    ( SELECT COUNT(id) 
     FROM subcategories 
     WHERE 
     category=categories.id AND 
     ( SELECT COUNT(id) 
      FROM products 
      WHERE 
      subcategory=subcategories.id 
     ) 
    ) 

이 쿼리는 적합하지 않을 수 있습니다. 그리고 테스트를 거치지 않았으므로 작동하지 않을 수도 있습니다.

편집 :이 같은

SELECT * FROM categories 
WHERE 
    EXISTS(
     SELECT COUNT(id) 
     FROM subcategories 
     WHERE 
     category=categories.id AND 
     EXISTS(
      SELECT * 
      FROM products 
      WHERE 
      subcategory=subcategories.id 
     ) 
    ) 
관련 문제