2010-08-03 1 views
1

실용적인 문제는 최근에 사용자가 최근에 보지 못했던 최근에 업데이트 된 항목의 목록을 표시하는 것입니다.특정 제약 조건 하에서 다른 테이블에서 ID를 찾을 수없는 행을 선택하십시오.

주어진 사용자에 대한 항목보기 테이블에 포함되지 않은 항목이 포함 된 표를 반환하려고합니다 (이 경우 사용자 번호 1). 나는 다음과 같이 생각해 냈다 :

SELECT * FROM items i 
WHERE i.updated_at > date_sub(curdate(), interval 10 day) 
AND i.id NOT IN (
    SELECT item_id FROM item_views v 
    WHERE i.created_at > date_sub(curdate(), interval 10 day) 
    AND i.user_id = 1 
) 

이것은 잘 작동하는 것 같다 (심지어 최선의 방법인가?). 그러나 8 일 전에 조회되고 3 일 전에 업데이트 된 항목을 고려할 때 문제가 발생합니다. 이러한 항목은 분명 새로 추가되었지만이 쿼리에서는 표시되지 않습니다. 이 제한 사항을 어떻게 적용해야합니까?

답변

0

이것은 최적의 솔루션이 아닙니다. 그러나 빠른 anwser는 OR을 대체해야합니다.

1

보기에 updated_at 열이있는 경우 업데이트 된 날짜가 타임 라인에 없는지 확인하기 위해 항상 행을 추가 할 수 있습니다. 더 나아가 업데이트 된 날짜가 마지막으로 본 날짜보다 큰지 확인할 수도 있습니다.

관련 문제