2012-08-07 1 views
0

osCommerce 스토어에서 하위 카테고리 또는 하위 카테고리가없는 카테고리의 parent_id를 가져 오려고합니다.osCommerce에서 하위 카테고리가없는 상위 카테고리 가져 오기

$categories_query = tep_db_query("select c.categories_id, cd.categories_name 
    from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd 
    where c.parent_id = '$parent_id' and 
    c.categories_id = cd.categories_id 
    order by sort_order, cd.categories_name"); 

위의 내용이로 번역을 상수가 채워 때 :

내가 내 코드에서 다음을 사용하여 테이블 레이아웃을 모른 채

select c.categories_id, cd.categories_name 
    from categories c, categories_description cd 
    where c.parent_id = '$parent_id' and 
    c.categories_id = cd.categories_id 
    order by sort_order, cd.categories_name 
+0

안녕하세요. 내가 편집 한 것처럼 코드를 단순화 할 수 있다면 도움이됩니다. SQL 질문을 할 때 PHP와 SQL 코드를 풀 수 있다면 특히 유용합니다. –

+0

나를 도와주세요. 네가 내게서 더 정교하게 만들고 싶다면 나에게 말해줘. 나는 내 문제를 이해하려고 애 쓰고있다. 내 문제를 해결해주세요. –

답변

-1

을, 일부는 대답에 필요한 추측을있다 너의 질문. 이 LEFT JOIN ... WHERE ... IS NULL 패턴이 첫 번째 테이블의 행은 두 번째 테이블에서 일치하지 않아도 가입 일치하는지

 SELECT c.parent_id 
     FROM TABLE_CATEGORIES c 
    LEFT JOIN TABLE_CATEGORIES_DESCRIPTION cd ON c.categories_id = cd.categories_id 
     WHERE cd.categories_id IS NULL 

참고 : 그러나, 나는이 같은 질의를 필요로 생각합니다.

+0

categories 및 categories_description 테이블은 categories_id 열로 연결됩니다. 왜냐하면 후자는 모든 이름 및 설명 정보가 있기 때문입니다. 그러나 쿼리는 행이없는 행을 보여줍니다. – random

+0

내 테이블 레이아웃은 os commerce 테이블 레이아웃과 유사합니다. 자식이없는 그 parent_id를 가져오고 싶습니다. –

0

당신이 갈 수 있습니다

SELECT c.categories_id, cd.categories_name, c.parent_id 
    FROM categories c, categories_description cd 
    WHERE c.categories_id=cd.categories_id 
    AND c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2) 
    ORDER BY c.sort_order, cd.categories_name 

또는 당신이 그와 함께 갈 수 :

SELECT c.categories_id, cd.categories_name, c.parent_id 
    FROM categories c 
    LEFT JOIN categories_description cd 
    ON c.categories_id=cd.categories_id 
    WHERE c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2) 
    ORDER BY c.sort_order, cd.categories_name 

하지만 당신이 정말로에 대해 알고 싶은 것은이 라인 :

c.categories_id NOT IN (SELECT DISTINCT c2.parent_id FROM categories c2) 

parent_id 열이 the one you're looking up and not in another과 같은 테이블에 있으므로 테이블을 검색해야합니다. 다른 별칭을 통해 참조하십시오.

는 SQL의이 부분은 반환됩니다 모든 categories_id (실제로 parents_id 테이블의) 부모 범주로 참조되고 그 : 이제

SELECT DISTINCT c2.parent_id FROM categories c2 

, 당신이 NOT IN 비교에 그 넣을 때 남겨 밑에 자식 범주가없는 행이 있습니다.