我们猜测我们有下表:
- id (int)
- active (int)
- active_from (datetime) (NULL)
- active_until (datetime) (NULL)
现在,我想要的是所有活动记录。 有效记录意味着:
- active = 1
- active_from <= current_date (IF IT'S NOT NULL)
- active_until >= current_date (IF IT'S NOT NULL)
我正在寻找在单个查询中应用这3个要求的查询。我目前正在使用:
SELECT * FROM product WHERE active = 1 AND active_from <= NOW() AND active_until >= NOW();
我只会通过不具有NULL
active_from
或active_until
的行来获得我想要的行为。
注意:我知道将当前日期存储在变量中之后比较它会更合适(这样做是因为我用PHP参数填充它)。
提前谢谢。
答案 0 :(得分:1)
在查询中使用ifnull(在其中包含active_from和active_until):
https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull
因此,基本上,如果值为null,请改用另一个日期。哪个日期取决于您和您需要的具体业务逻辑(例如:2100-01-01或1900-01-01等)
答案 1 :(得分:1)
SELECT * FROM YourTableName
WHERE active = 1
AND (active_from < CURDATE()
OR active_from IS NULL)
AND (active_until > CURDATE()
OR active_until IS NULL);
答案 2 :(得分:0)
SELECT * FROM product WHERE active = 1 AND(active_from&lt; CURDATE() AND active_from IS NOT NULL) AND(active_until&gt; CURDATE() AND active_until IS NOT NULL)