2010-08-18 5 views
0

나는 목록 데이터베이스가 있습니다. 기본적으로MySQL 테이블에 열 데이터가 있는지 확인

id | listing_id | attribute_id 

listings_attributes 테이블에는 특정 목록에 할당 된 속성 : 나는이처럼 보이는 listings_attributes 데이터베이스를 가지고있다.

나는 그들이 가지고있는 속성에 따라 목록을 필터링하고 싶습니다.

예를 들어 attribute_id가 1 인 모든 목록을 찾고 싶습니다. 쉽습니다. 내 문제는 하나의은 attribute_id와 명부가있는 경우 내가 1의은 attribute_id을 가지고 2. 목록을 뽑아 어떻게하지만 2의은 attribute_id이없는 무엇

SELECT l.id FROM listings AS l 
    LEFT JOIN listings_attributes AS la ON l.id = la.listing_id 
    WHERE la.attribute_id = 1 
    GROUP BY l.id 

, 난 몰라 이것들을 데이터베이스에서 빼내고 싶습니다.

그러나 attribute_id가 1, 2 및 3 인 목록이 있으면 데이터베이스에서 가져 오도록하고 싶습니다.

여기에 나와있는 SQL이 있지만 "attribute_id"사이의 "OR"이 작동하지 않으며 "AND"도 아닙니다.

SELECT l.id FROM listings AS l 
    LEFT JOIN listings_attributes AS la ON l.id = la.listing_id 
    WHERE (la.attribute_id = 1 OR la.attribute_id = 2) 
    GROUP BY l.id 

위에서 설명한대로 작동하려면 어떤 코드가 필요합니까?

답변

1

여러 속성을 찾으려면 GROUP BYOR을 사용하여 속성이 모두 이미 존재하는 것처럼 listings_attributes 테이블에 존재하는지 확인해야합니다. 그런 다음 HAVING 절을 추가하여 둘 이상의 행이 일치하는지 확인하십시오. 좋아요 :

SELECT l.id FROM listings AS l 
    LEFT JOIN listings_attributes AS la ON l.id = la.listing_id 
    WHERE (la.attribute_id = 1 OR la.attribute_id = 2) 
    GROUP BY l.id HAVING COUNT(*) = 2 
+0

감사합니다. Chris! HAVING COUNT (*) = 2를 더 구체적으로 만들 수 있습니까? 실제로 코드에 LEFT JOINS가 여러 개 있습니다. –

+0

사실 나는 약간의 잘못된 테스트라고 생각합니다. 작동하는 것 같습니다 :) 도와 줘서 고마워! –

관련 문제