我如何调整周末?

时间:2011-10-22 19:37:09

标签: php mysql

我正在从我的桌子中选择过去一天发布的记录。这是针对内部网站,周六或周日没有帖子。

SELECT * 
FROM table 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

如果今天是工作日或星期六(前一天是星期五),这样可以正常工作。如果今天是星期天,我想获得星期五的记录,但目前我的代码显示星期六的记录(这显然是空白的,因为星期六没有人发布)。我该如何解决这个问题?

谢谢!

2 个答案:

答案 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)

http://codepad.org/m4TuyGMX

修改

注意,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
";
}

?>

http://codepad.org/StoUfOG2