2014-05-08 144 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

相关问题