用户可以在指定的天数内注册优质商家信息,例如30天。
tblPremiumListings
user_id days created_date
---------------------------------
1 30 2013-05-21
2 60 2013-06-21
3 120 2012-06-21
如何选择高级列表中仍有剩余天数的记录。
答案 0 :(得分:5)
SELECT *
FROM tblPremiumListings
WHERE created_date + INTERVAL `days` DAY >= CURDATE()
答案 1 :(得分:1)
使用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上放一个索引并快速查找所有已结束的高级列表,使用原始表格,你总是必须进行全表扫描才能找到过期列表的记录
答案 2 :(得分:0)
SELECT * FROM
tblPremiumListings
WHERE (DATEDIFF(NOW(), created_date) - days) <= 0
看看它是否解决了你的问题
答案 3 :(得分: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())
答案 4 :(得分:0)
试试这个...
SELECT * FROM
tblPremiumListings
WHERE DATE_ADD(created_date, days)>DATE(NOW())