2011-10-22 54 views
1

我正在從我的表格中選擇過去一天內發佈的記錄。這是一個內部網站,週六或週日沒有帖子。週末如何調整?

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

如果今天是星期幾或星期六(前一天是星期五),這可以正常工作。如果今天是星期天,我想獲得星期五的記錄,但是目前我的代碼顯示星期六的記錄(由於週六沒有人發佈,所以顯然是空白的)。我該如何解決這個問題?

謝謝!

+1

之前,看看它是什麼工作日(在PHP)。相應地調整查詢中指定的時間間隔。 –

+0

正如@Pekka所建議的,如果您使用的是PHP,請根據您要查找的日期調整查詢。 –

回答

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

如果你想使用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