用户可以在指定天数(例如 30 天)内注册高级列表。
tblPremiumListings
user_id days created_date
---------------------------------
1 30 2013-05-21
2 60 2013-06-21
3 120 2012-06-21
我将如何选择在高级列表中还有剩余天数的记录。
SELECT *
FROM tblPremiumListings
WHERE created_date + INTERVAL `days` DAY >= CURDATE()
使用 INTERVAL 最容易阅读
select *
from tblPremiumListings
where created_date + interval days day >= now();
但我也会将表更改为而created_date
不是days
存储end_date
。这样查询是
select *
from tblPremiumListings
where end_date >= now();
这样做的好处是您可以在 end_date 上放置一个索引并快速找到所有已结束的高级列表,对于您的原始表,您将始终需要进行全表扫描才能找到过期列表的记录。
SELECT * FROM
tblPremiumListings
WHERE (DATEDIFF(NOW(), created_date) - days) <= 0
看看能不能解决你的问题
获得结果的一种方法:
SELECT t.user_id
, t.days
, t.created_date
FROM tblPremiumListings t
WHERE t.created_date + INTERVAL t.days DAY > DATE(NOW())
您可能需要一个>=
比较运算符(而不是>
),具体取决于您定义剩余天数的方式。
注意:此查询的访问计划将全面扫描所有行,因为 MySQL 无法对索引进行范围扫描。对于大型集合,拥有可以被索引以满足查询的列可能会提高性能,例如
WHERE t.expire_date > DATE(NOW())
试试这个...
SELECT * FROM
tblPremiumListings
WHERE DATE_ADD(created_date, days)>DATE(NOW())