MySQL - 获取本周的日子

时间:2012-04-20 18:45:35

标签: php mysql

我有一张桌子,上面有Mon -Sun特别优惠。我希望从今天开始提供下一个优惠。在表中,天数的数值为1-7

例如

1(mon)-offer1

2(tues)-offer2

3(wed)-offer3

6(Sat)-offer4

如果今天是Sun DAYOFWEEK 7,那么我希望收到的报价是offer1,这是下一个可用的星期一DAYOFWEEK 1.如果今天是星期五那么我会得到报价4。

这是我的SQL。问题是我无法使offer1方案起作用。

SELECT * 
FROM special_offers  
WHERE special_offers.special_day >= IF(DAYOFWEEK(NOW())-1>0,DAYOFWEEK(NOW())-1,7) 
  AND special_offers.pubID = 48 
LIMIT 1

3 个答案:

答案 0 :(得分:2)

对于MySQL DAYOFWEEK 函数,Mondey等于2而Sundey等于1,请查看manual

您的问题的简单解决方法是使用if语句:

IF(DAYOFWEEK(NOW())-1>0,DAYOFWEEK(NOW())-1,7)

这会将天数转换为正常顺序。

答案 1 :(得分:1)

目前尚不清楚预期值和实际值是多少,但据我所知,您希望这样做:

SELECT * 
FROM special_offers  
WHERE special_offers.special_day >= case DAYOFWEEK(NOW()) when 1 then 7 when 2 then 1 when 3 then 2 when 4 then 3 when 5 then 4 when 6 then 5 when 7 then 6 end
AND special_offers.pubID = 48
LIMIT 1

编辑: 这将尝试从今天到周日找到下一个可用的特别优惠,如果没有找到,它将找到第一个特别优惠。

SELECT *
FROM  special_offers so
WHERE so.pubID=48
ORDER BY 
if(special_day = case DAYOFWEEK(NOW()) when 1 then 7 when 2 then 1 when 3 then 2 when 4 then 3 when 5 then 4 when 6 then 5 when 7 then 6 end, 1, 0) desc, so.special_day
limit 1

答案 2 :(得分:1)

首先,MySQL DAYOFWEEK()函数的返回值在星期日为1,星期六为7。因此,如果您的表格周一为1,星期日为7,则需要调整1。

其次,您需要的是模块化算术。这对你有用吗?

SELECT * 
  FROM special_offers
 ORDER BY (special_offers.special_day + 8 - DAYOFWEEK(NOW())) MOD 7
  LIMIT 1