这与我现在的相似,是:
SELECT COUNT(author) FROM `posts` WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) AND author='FooBar'
这将给我一个作者在过去一周内发布的次数。
如果我要在星期日下午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'";
?>
答案 0 :(得分:15)
要获得最新的前一个星期天午夜,这应该这样做。将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)