【问题标题】:How can I get 7 days before last 7 days using UNIX_TIMESTAMP?如何使用 UNIX_TIMESTAMP 在过去 7 天之前获得 7 天?
【发布时间】:2025-11-24 19:25:04
【问题描述】:

我使用下面的代码从名为 registered_at 的 mySQL 字段返回结果,这样我就可以获取过去 7 天在该网站上注册的用户,并且工作正常:

andWhere('registered_at > UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY)')

我的问题是我还需要在过去 7 天前 7 天获得在网站上注册的用户。逻辑是显示最近 2 周的注册用户数,然后我可以输出这 2 周之间的百分比差异,例如:本周用户增加 10%。

我尝试了类似的方法:

andWhere('registered_at > UNIX_TIMESTAMP((NOW() - INTERVAL 14 DAY) - (NOW() - INTERVAL 7 DAY))')

但没用。

【问题讨论】:

    标签: php mysql unix-timestamp


    【解决方案1】:

    你可以使用:

    andWhere('registered_at > UNIX_TIMESTAMP(NOW() - INTERVAL 14 DAY)')
    andWhere('registered_at < UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY)')
    

    这将产生查询,获取过去 14 天的 registered_at,但也会修剪过去 7 天的 registered_at,因此您保持 7-14 天的间隔。

    如果我们将其转换为“原始”SQL 查询,它将是:

    SELECT 
      * 
    FROM 
      users 
    WHERE 
      registered_at > UNIX_TIMESTAMP(NOW() - INTERVAL 14 DAY)' 
      AND registered_at < UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY)'
    

    【讨论】:

    • 是的,最后我走了这条路,然后在前端使用 php 我打印了上周前一周的 2 个查询的差异。我只是想知道我们是否可以只用一个查询来做到这一点。还是不可能?
    • 是的,您可以使用单个查询来完成 - 如果您深入到“原始”SQL 查询,您可以这样编写。 SELECT * FROM users WHERE registered_at &gt; UNIX_TIMESTAMP(NOW() - INTERVAL 14 DAY)' AND registered_at &lt; UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY)'。不知道你用的是哪个PHP框架,不过应该可以在SQL查询中组合条件。
    • 谢谢你,伙计。我使用 Yii2 但我很新。还有很多东西要学;)