MySQL嵌套案例

MySQL嵌套案例,mysql,nested,case,dayofweek,Mysql,Nested,Case,Dayofweek,我对MySQL中的嵌套CASE有点问题 剩余开放时间表如下: rest_opening_hours ( restid int, day_of_week int, hours_open time, hours_close time, ) 然后我尝试执行一个查询。WHEN DAYOFWEEK NOW=1位的原因是,我注意到,如果在星期天1尝试删除,它只返回1,这会导致问题 SELECT h.hours_close FROM restaurants s INNER JOIN rest

我对MySQL中的嵌套CASE有点问题

剩余开放时间表如下:

rest_opening_hours (
  restid int,
  day_of_week int,
  hours_open time,
  hours_close time,
)
然后我尝试执行一个查询。WHEN DAYOFWEEK NOW=1位的原因是,我注意到,如果在星期天1尝试删除,它只返回1,这会导致问题

SELECT h.hours_close
FROM restaurants s
INNER JOIN rest_opening_hours h
ON s.id = h.restid
WHERE 
CASE 
    WHEN h.hours_close > h.hours_open
    THEN h.day_of_week = DAYOFWEEK(NOW()) 
ELSE 
    CASE 
        WHEN DAYOFWEEK(NOW()) = 1
        THEN h.day_of_week = 7
    ELSE
        h.day_of_week = DAYOFWEEK(NOW() - 1) 
    END 
END 
AND s.id = '2'
LIMIT 0 , 30
以下是休息时间表中的一些数据:

INSERT INTO `rest_opening_hours` (`restid`, `day_of_week`, `hours_open`, `hours_close`) VALUES
(2, 1, '17:00:00', '23:00:00'),
(2, 7, '17:00:00', '06:00:00'),
(2, 6, '17:00:00', '00:00:00'),
(2, 5, '17:00:00', '01:00:00'),
(2, 4, '17:00:00', '02:00:00'),
(2, 3, '03:00:00', '23:00:00'),
(2, 2, '17:00:00', '04:00:00');
我唯一的问题是,我的查询返回了多条记录,我真的不明白为什么。查询在星期天1返回星期天1和星期六7的结果,而不仅仅是我在查询中预期的第7天

我希望返回06:00的结果,因为今天是星期日第1天,按照逻辑,当DAYOFWEEKNOW=1时,我们选择h.days\u of_week=7,即昨天的开放时间,因为我们之前推断h.hours\u close 有人能解释一下吗,因为我花了很长时间在玩这个,但我似乎什么都没得到

提前谢谢

瑞安

修正查询

SELECT h.hours_close
FROM restaurants s
INNER JOIN rest_opening_hours h ON s.id = h.restid
WHERE 
CASE 
    WHEN h.hours_close > h.hours_open
    THEN h.day_of_week = DAYOFWEEK( NOW( ) ) 
    ELSE h.day_of_week = DAYOFWEEK( DATE_SUB( NOW( ) , INTERVAL 1 DAY ) ) 
END 
AND s.id =  '2'
我的问题似乎是,我的查询同时选择了问题7的前一天和问题1中的那一天,因为一个是h.hours\u close>h.hours\u open,另一个是h.hours\u close 在伪代码中:

if (closingtime < openingtime) {
return closing time from yesterday
} else {
return closing time from today
}

它是如此简单-为什么它会给我带来这么多该死的问题

上帝保佑伪代码。这就是我所需要的:这就是你想要的:

select * from t1
join (
  select restid, day_of_week,
    if(hours_close < hours_open,
      if(day_of_week = 1, 7, day_of_week - 1),
      day_of_week
    ) as NewDayOfWeek
  from t1
) as S
on s.restid = t1.restid and s.day_of_week = t1.day_of_week

嘿,莫斯蒂,谢谢你的回复。我只想在第7天之前过滤,前提是满足多个条件,第一,h.hours\u close