MySql - 剩下几天了

时间:2013-07-22 06:00:40

标签: mysql sql

用户可以在指定的天数内注册优质商家信息,例如30天。

tblPremiumListings

user_id     days     created_date  
---------------------------------
1           30        2013-05-21
2           60        2013-06-21
3           120       2012-06-21

如何选择高级列表中仍有剩余天数的记录。

5 个答案:

答案 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())