2014-05-08 113 views
0

我有ID(PK,AI),名稱和日期,當用戶註冊時我設置日期= CURDATE()表。mysql列表數據不包括週末

我有一個PHP頁面,我必須列出其中CURDATE()> =(日期+ 3天)(不包括週末)(週六和週日)的名稱意味着我列出了3天前完成註冊的用戶名,但是我不要算週末。

,如果有人在週一註冊,這意味着,他應該列出的頁面上週四,如果他上週五,註冊頁面列表他只在週三(不包括週末)

有MySQL中的任何一種方法來完成這個 ?

+0

你必須寫這個方法 – user3470953

+0

爲什麼你想在mysql中完成而不是在php中完成?我會說這會容易很多。 –

+0

使用MySQL函數DAYOFWEEK()http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofweek跳過日期 – StanislavL

回答

0

而不是做一個複雜的MySQL查詢,你不能只是通過不同的日期來檢查,取決於你的PHP腳本的工作日?

因此,而不是在你的SQL查詢您的日期+3天< =今天相比,傳遞一個變量的日期偏移或只是計算在PHP的日期和傳遞日期。

day of the week | offset 
1 | 5 
2 | 5 
3 | 5 
4 | 3 
5 | 3 
6 | 4 
7 | 5 
0

易在MySQL中。

SELECT CURRENT_DATE + interval (3 + 2*(weekday(CURRENt_DATE) > 1)) day; 

感謝@JamesBlond的表格,節省我解釋。 ;-)

編輯:我很困惑(索引查殺)的方式來請求數據:通常你應該嘗試從表未修改的日期,並搗鼓你的CURRENT_DATE數據。

只要我理解你的權利,它應該是以下內容,所以你也可以簡單地使用CASE WHEN clasue,這是更具可讀性和更容易採用。

thedate - 間隔( 3 + 2 *(平日(thedate)< 3) +(平日(thedate)> 4)*(平日(thedate)-4))DAY AS 3_days_before

http://www.sqlfiddle.com/#!2/49731/9/0

THEDATE  WEEKDAY(THEDATE) THEDATE_FORMATTED 3_DAYS_BEFORE FORMATTED_3_DAYS_BEFORE 
April, 27 2014 00:00:00+0000 6 Sunday April, 22 2014 00:00:00+0000 Tuesday 
April, 28 2014 00:00:00+0000 0 Monday April, 23 2014 00:00:00+0000 Wednesday 
April, 29 2014 00:00:00+0000 1 Tuesday  April, 24 2014 00:00:00+0000 Thursday 
April, 30 2014 00:00:00+0000 2 Wednesday April, 25 2014 00:00:00+0000 Friday 
May, 01 2014 00:00:00+0000 3 Thursday April, 28 2014 00:00:00+0000 Monday 
May, 02 2014 00:00:00+0000 4 Friday April, 29 2014 00:00:00+0000 Tuesday 
May, 03 2014 00:00:00+0000 5 Saturday April, 29 2014 00:00:00+0000 Tuesday 
May, 04 2014 00:00:00+0000 6 Sunday April, 29 2014 00:00:00+0000 Tuesday 
May, 05 2014 00:00:00+0000 0 Monday April, 30 2014 00:00:00+0000 Wednesday 
May, 06 2014 00:00:00+0000 1 Tuesday  May, 01 2014 00:00:00+0000 Thursday 
May, 07 2014 00:00:00+0000 2 Wednesday May, 02 2014 00:00:00+0000 Friday 
+0

對不起,這個邏輯不起作用:( – Joel

+0

是的,我沒有照顧星期六和星期日,因爲我以爲你只是想在星期幾算上。啊,我明白了,你想要回到3天前,而不是前鋒 – flaschenpost

相關問題