我正在从我的桌子中选择过去一天发布的记录。这是针对内部网站,周六或周日没有帖子。
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
如果今天是工作日或星期六(前一天是星期五),这样可以正常工作。如果今天是星期天,我想获得星期五的记录,但目前我的代码显示星期六的记录(这显然是空白的,因为星期六没有人发布)。我该如何解决这个问题?
谢谢!
答案 0 :(得分:3)
查看WEEKDAY
运算符。它返回一周中的一天的索引。
0 =星期一,6 =星期日
SELECT *
FROM table
WHERE date = CASE WEEKDAY(CURDATE()) -- Switch on day index
WHEN 6 THEN DATE_SUB(CURDATE(), INTERVAL 2 DAY) -- If sunday, back 2 days
WHEN 0 THEN DATE_SUB(CURDATE(), INTERVAL 3 DAY) -- If monday, back 3 days
ELSE DATE_SUB(CURDATE(), INTERVAL 1 DAY) -- Else back 1 day
END
答案 1 :(得分:1)
如果你想使用PHP:
<?php
$c_day = date('w');
if ($c_day == 6) {
$day_interval = 2;
} else if ($c_day == 0) {
$day_interval = 3;
} else {
$day_interval = 1;
}
$query = "
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL $day_interval DAY)
";
echo "
c_day = $c_day
$query
";
?>
回声(星期六):
c_day = 6
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 2 DAY)
修改强>
注意,sunday
应该是0
。这是一个测试:
<?php
for ($i = 0; $i < 7; $i++) {
$c_day = date('w', strtotime("last monday +$i day"));
if ($c_day == 6) {
$day_interval = 2;
} else if ($c_day == 0) {
$day_interval = 3;
} else {
$day_interval = 1;
}
$query = "
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL $day_interval DAY)
";
echo "
c_day = $c_day (".date('l', strtotime("last monday +$i day")).")
$query
";
}
?>