我正在從我的表格中選擇過去一天內發佈的記錄。這是一個內部網站,週六或週日沒有帖子。週末如何調整?
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
如果今天是星期幾或星期六(前一天是星期五),這可以正常工作。如果今天是星期天,我想獲得星期五的記錄,但是目前我的代碼顯示星期六的記錄(由於週六沒有人發佈,所以顯然是空白的)。我該如何解決這個問題?
謝謝!
我正在從我的表格中選擇過去一天內發佈的記錄。這是一個內部網站,週六或週日沒有帖子。週末如何調整?
SELECT *
FROM table
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
如果今天是星期幾或星期六(前一天是星期五),這可以正常工作。如果今天是星期天,我想獲得星期五的記錄,但是目前我的代碼顯示星期六的記錄(由於週六沒有人發佈,所以顯然是空白的)。我該如何解決這個問題?
謝謝!
看看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
如果你想使用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
";
}
?>
之前,看看它是什麼工作日(在PHP)。相應地調整查詢中指定的時間間隔。 –
正如@Pekka所建議的,如果您使用的是PHP,請根據您要查找的日期調整查詢。 –