我有一张桌子,上面有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
答案 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