这与我现在的情况类似,那就是: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)