2017-12-14 3 views
1

I했습니다있어 다음과 같은 알림 표 :포스트 그레스 쿼리 여러 곳 예상대로 작동하지 않는 조항

| id (PK - INT) | user_id (UUID) | text (Text) | show_after (Date) default NULL | 

내가 할 일을 원하고있어 나는 또한 우리를 보장 할의 user_id에 대한 모든 notifs를 선택이다 show_after이 미래에있는 곳에서는 notifs를 표시하지 마십시오.

5 일 후에 알림을 표시하려면 show_after = NOW() + 5 days으로 설정하십시오.

몇 가지 이유 때문에 내가 설정 한 쿼리가 이상하게 작동하고 일부 notifs의 show_after 날짜가 미래에 설정되어 있어도 show_after === 모든 날짜에 대한 알림을 항상 반환합니다.

select * from activities where user_id = '<uuid>' OR show_after = null AND 
show_after <= NOW(); 

가 나는 또한 성공없이 OR/AND를 중심으로 전환 시도 : 여기

내가 시도 쿼리입니다.

답변

1

당신은

select * from activities 
where user_id = '<uuid>' 
and (
    show_after <= NOW() 
    OR 
    show_after IS NULL 
    ) 
; 

는 또한 SQL에서 당신이 값이없는 경우 결정하기 위해 IS NULL를 사용해야 논리를 제어하기 위해 괄호가 필요합니다. 등호 기호를 사용하면 작동하지 않습니다 ( NULL = NULL은 항상 false입니다).

+0

굉장! 날짜 쿼리를 다음과 같이 변경했습니다 :'show_after <= NOW()'(<=) (내 질문에 업데이트) – James111

+1

'<='말이 맞습니다. 건배. 장래의 쿼리에서는 괄호로 제한하는 예기치 않은 효과가있을 수 있으므로 항상 '또는'을주의해야합니다. –