我有id(PK,AI)的表,名称和日期,当用户注册时我设置了date = CURDATE()。
我有一个PHP页面,我必须列出CURDATE()> =(日期+ 3天)的名称,不包括周末(周六和周日)意味着我列出了在3天之前完成注册但是我的用户名不要计算周末。
这意味着如果有人在周一注册,他应该在周四的页面上列出,如果他在周五注册,该页面仅在周三列出他(周末除外)
MySQL中是否有任何方法可以实现此目的?
答案 0 :(得分: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
答案 1 :(得分:0)
易于使用MySQL。
SELECT CURRENT_DATE + interval (3 + 2*(weekday(CURRENt_DATE) > 1)) day;
感谢@JamesBlond的表,请救我解释。 ; - )
编辑:我对(索引查杀)方式请求数据感到困惑:通常你应该尝试从表中修改日期并调整你的CURRENT_DATE数据。
只要我理解正确,就应该如下,所以你也可以简单地使用CASE WHEN
clasue,它更易读,更容易采用。
日期 - 间隔( 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