mysql列表数据不包括周末

时间:2014-05-08 05:43:37

标签: mysql sql

我有id(PK,AI)的表,名称和日期,当用户注册时我设置了date = CURDATE()。

我有一个PHP页面,我必须列出CURDATE()> =(日期+ 3天)的名称,不包括周末(周六和周日)意味着我列出了在3天之前完成注册但是我的用户名不要计算周末。

这意味着如果有人在周一注册,他应该在周四的页面上列出,如果他在周五注册,该页面仅在周三列出他(周末除外)

MySQL中是否有任何方法可以实现此目的?

2 个答案:

答案 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