2015-11-01 38 views
0

我想找到一个更好的方法来选择上个月创建的所有行。目前我只是回到x天,但我希望它在每个月的1号运行,并且不希望不停地调整它。用unixtimestamp查找上个月的所有mysql行

基本上,我只是希望它从月份是上个月的“日期”字段中进行选择。

这里是我当前的SQL:

SELECT a.* 
FROM (SELECT a.article_id, a.date, a.tagline_image, a.article_top_image_filename, a.title, a.tagline, a.views, c.category_id 
    FROM 
     articles a 
    LEFT JOIN 
     `article_category_reference` c ON a.article_id = c.article_id 
    WHERE 
     a.date >= UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 33 DAY)) AND c.category_id NOT IN (63) AND a.active = 1 group by `a`.`article_id` 
    ORDER BY 
     a.views DESC 
    LIMIT 30 
    ) a 
ORDER BY views ASC 
+0

可能想查看'mysql create event'的功能,让它在某些时候被机械化。可以指定开始日期时间和间隔。时间间隔可以从1秒到每年不等。数据输出可能在您的收件箱 – Drew

回答

2

试试吗?

WHERE MONTH(FROM_UNIXTIME(a.date)) = MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 
+1

这似乎工作,谢谢。 – NaughtySquid

+0

好!请将您的问题标记为已解决,并将其视为已接受的答案,以便其他人不会失去尝试回答的时间:-) –

0

一个好的策略是通过计算该月的最后一天之前,再加入1天拿到最后一个月的第一天:

a.date >= UNIX_TIMESTAMP(DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY)) 
+0

这仍然给我从今天的东西。 – NaughtySquid

相关问题