这与我现在的情况类似,那就是:
SELECT COUNT(author) FROM `posts` WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND author='FooBar'
这将给我一个计数多少次,一个作者已在过去一周。
我想取而代之的是,如果我要在周日下午5:30运行程序,查找从上周日12:00 am到本周日12:00 am的帖子。同样,如果我忘记在星期天运行,现在是星期一。我还是希望从上周日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'";
?>

最佳答案

为了得到最晚的前一个星期天午夜,应该这样做。用日期时间替换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)

07-24 09:18