5

这与我现在所拥有的类似,即:

SELECT COUNT(author) FROM `posts` WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND author='FooBar'

这将让我计算作者在过去 1 周内发帖的次数。

我想要它,所以如果我要在周日下午 5:30 运行程序以查找从上周日上午 12:00 到本周日上午 12:00 的帖子。同样,如果我忘记在周日运行它,现在是周一。我仍然希望它从上周日凌晨 12:00 运行到周日凌晨 12:00

编辑:

我已经完成了我需要使用 PHP 来形成正确的 SQL 语句的工作,但我仍然很好奇如何在 SQL 中做到这一点。

<?php
    $dayofweek = strftime("%A",time());
    if($dayofweek == "Sunday") {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Sunday'));
    } else {
        $last_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday',strtotime('Last Sunday')));
        $this_sunday = date('Y-m-d h:i:s',strtotime('Last Sunday'));
    }
    print "last_sunday={$last_sunday}<br>";
    print "this_sunday={$this_sunday}<br>";
    print "SELECT COUNT(author) FROM `posts` WHERE `date` <= '$this_sunday' AND `date` >= '$last_sunday' AND author='FooBar'";
?>
4

1 回答 1

21

要获得最新的前周日午夜,应该这样做。用您的日期时间替换两个实例NOW()以检查另一个日期。

SELECT DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY) latest_sun

要提前一周获得星期日,请改用DAYOFWEEK(NOW())+6 DAY.

编辑:那会让你的查询;

SELECT COUNT(author)
FROM `posts` 
WHERE author='FooBar'
  AND `date` >= DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())+6 DAY)
  AND `date` <  DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY)
于 2013-07-28T21:10:18.117 回答