首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL嵌套案例

MySQL嵌套案例
EN

Stack Overflow用户
提问于 2012-02-12 14:15:41
回答 1查看 3.3K关注 0票数 0

我在MySQL中遇到了一些嵌套案例的问题。

rest_opening_hours表如下:

代码语言:javascript
复制
rest_opening_hours (
  restid int,
  day_of_week int,
  hours_open time,
  hours_close time,
)

然后,我正在尝试执行查询。WHEN DAYOFWEEK( NOW()) =1位的原因是我注意到,如果您尝试在星期天(第1天)取走,它只返回1,这会导致问题。

代码语言:javascript
复制
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

以下是rest_opening_hours表中的一些数据:

代码语言:javascript
复制
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“,因为今天是星期天(第一天),按照逻辑,当DAYOFWEEK(NOW()) =1时,我们选择where h.days_of_week =7(即昨天的开放时间),因为我们之前推导出h.hours_close < h.hours_open。然而,我得到了两个结果:"06:00“和"23:00”,这对我来说毫无意义,这几乎就像是MySQL忽略了第二个案例,只返回这两个案例!

有没有人能对此有所了解,因为我已经花了很长时间来研究这个问题,但似乎没有取得任何进展。

提前感谢!

瑞安

修改后的查询

代码语言:javascript
复制
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_close > h.hours_open,另一个是h.hours_close < h.hours_open -任何关于如何将其隔离为一个结果的ides,可能是一种重组,以便如果关闭时间小于打开时间(即,第二天关闭),我只会查看前一天的结果。

在伪代码中:

代码语言:javascript
复制
if (closingtime < openingtime) {
return closing time from yesterday
} else {
return closing time from today
}

很简单--为什么它会给我带来这么多问题!?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-12 14:26:36

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9246884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档