2010-05-19 4 views
1

혼란스럽지 않고이 질문을 할 수 있기를 바랍니다. 저는 사진 작가이며 우리 고객들 중 일부는 우리가 찍은 사진에 금식을하고 있습니다. 우리는 우리의 포트폴리오에 그들이 평가할 수있는 수백 장의 사진이 있습니다. 제가하고 싶은 일은 고객에게 사진을 다시 평가 해달라고 요청하는 것입니다. 그러나 아직 평가하지 않은 사진 만 보여 주면됩니다. 나는 현재 세 개의 테이블을 가지고있다 : 실제 등급을 저장하는 테이블, 그림 (또는 각 그림의 위치)을 저장하는 테이블, 평가 자에 대한 정보를 저장하는 테이블. 그게 도움이된다면 DB 관리를 위해 codeigniter를 사용하고 있습니다. 내가 지금까지 가지고하는 것은 이것이다 :MySQL이 누락 된 등급을 찾습니다.

"SELECT * FROM ratings LEFT JOIN portfolio ON ratings.portfolioid = portfolio.portfolioid"

이것은 각 등급에 나에게 행을 줄 것이다,하지만 평가가 사진 누락되는 경우 나 표시되지 않습니다. 미리 감사드립니다!

답변

0

지금은 그것을 테스트 할 수 없습니다, 그러나이 같은 뭔가 작업 할 것이다 : - :

SELECT * FROM portfolio p 
LEFT OUTER JOIN rating r ON r.portfolioid = p.portfolioid AND r.email = '[email protected]' 
WHERE r.portfolioid IS NULL 

SELECT * FROM portfolio LEFT JOIN (
    SELECT portfolioid FROM rating WHERE email = "[email protected]" 
) AS rated USING (portfolioid) 
WHERE rated.portfolioid IS NULL 
+0

db 오류가 발생했습니다 : 'where 절'에 알 수없는 'ratings.portfolioid'열 ... 이유가 확실하지 않습니다. 나는 틀린 철자를 쓰지 않았 음을 확신한다. 이것은 특정 쿼리로 인한 것일 수 있습니까? – Dustin

+0

당신은 WHERE rated.portfolioid가 NULL이 아니어야합니다. ratings.portfolioid IS NULL - rated는 부질의에 의해 생성 된 임시 테이블의 이름입니다. – ChrisV

+0

아름다운 !!! 그것은 그것을했다 (적어도 나는 그렇게 생각한다). 바보 같은 실수에 대해 유감스럽게 생각합니다 :) 도움에 감사드립니다! – Dustin

1
SELECT * FROM portfolio WHERE NOT EXISTS (SELECT * FROM ratings where ratings.portfolioid = portfolio.portfolioid) 

SELECT * FROM portfolio LEFT JOIN ratings ON portfolio.portfolioid = ratings.portfolioid WHERE ratings.portfolioid IS NULL 

등급이없는 사람에게 모두 알려줘야합니다.

+0

LEFT JOIN 버전이 더 좋은 방법입니다 (성능 향상). – nathan

+0

나는 또한 다른 대답 아래에 댓글을 달았습니다. 나는 이것이 전혀 평가되지 않은 그림들만 보여줄 것이라고 믿습니다. 내가 원하는 것은 특정 사람이 평가하지 않은 사진을 보여주는 것입니다. 나는 또한 그 사람의 전자 메일 주소를 기록하고 있지만, (그리고 email = '[email protected]') 넣을 때마다 빈 결과가 나온다. 어떤 아이디어? – Dustin

1

@ChrisV 당신은이 버전의 부속 선택을 피할 수를 추가 조건이있는 OUTER JOIN의 아름다움. 추가 조건은 조인 전에 적용됩니다. 추가 조건 (AND r.email = ...)과 일치하는 등급에만 포트폴리오가 합류하므로 등급이 없으면 '[email protected]'이 해당 포트폴리오를 평가하지 않았 음을 의미합니다.

+0

좋은 하나 - 나는 더 나은 접근법을 놓치고 있다고 잔소리하는 느낌이 들었다. 이렇게하면 최적화가 더 잘되고 단순 해집니다. – ChrisV