我有以下通知表:
| id (PK - INT) | user_id (UUID) | text (Text) | show_after (Date) default NULL |
我想要的是选择user_id
的所有通知,我还要确保我们不会显示未来show_after
日期的通知。
因此,如果我想在5天后显示通知,我会设置show_after = NOW() + 5 days
。
由于某些原因,我设置的查询表现得非常奇怪,并且总是会返回show_after ===任何日期的通知,即使某些通知在将来设置了show_after日期。
这是我试过的查询:
select * from activities where user_id = '<uuid>' OR show_after = null AND
show_after <= NOW();
我也试过切换OR / AND而没有成功。
答案 0 :(得分:1)
您需要括号来控制逻辑
select * from activities
where user_id = '<uuid>'
and (
show_after <= NOW()
OR
show_after IS NULL
)
;
此外,在SQL中,您必须使用IS NULL
来确定是否没有值。使用等号不起作用(NULL = NULL
总是假的。)