我在MySQL中嵌套CASE有點問題。MySQL嵌套CASE
的rest_opening_hours表如下:
rest_opening_hours (
restid int,
day_of_week int,
hours_open time,
hours_close time,
)
我則試圖執行一個查詢。 WHAY 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
下面是從rest_opening_hours表中的一些數據:
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天),並遵循邏輯,當DAYOFWEEK(NOW())= 1時,我們選擇h.days_of_week = 7 (即昨天的開放時間),因爲我們以前推斷h.hours_close < h.hours_open。但是,我得到了兩個結果:「06:00」和「23:00」,這對我來說沒有任何意義,這就好像MySQL忽略了第二種情況,並且只是返回兩個!!!?!
任何人都可以解釋這一點,因爲我花了很多年玩這個,我似乎沒有得到任何地方。
在此先感謝!
瑞安
修訂查詢
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 - 關於如何將這個結果隔離到一個結果的任何ide,或許是重新排序,以便我只查看前一天的IF時間少於開放時間(即第二天關閉)。
僞代碼:
if (closingtime < openingtime) {
return closing time from yesterday
} else {
return closing time from today
}
它是如此簡單 - 爲什麼會害我這麼多該死的問題!?!?!?
嘿莫斯,謝謝你的回覆。我只想在第7天過濾,如果滿足一些條件,首先,h.hours_close
Ryan
2012-02-12 06:49:30
哦,你應該使用這個'select dayofweek(now()),dayofweek(date_sub(now(),interval 1 day))如昨天' – 2012-02-12 06:56:33
Thanks Mosty,that works比我正在做的事更好。但我仍然得到相同的兩個結果...我已將上述修改的查詢放在 – Ryan 2012-02-12 07:03:24