MySQLでネストされたCASEに問題があります。私は、クエリを実行しようとしていますMySQLネストされたケース
rest_opening_hours (
restid int,
day_of_week int,
hours_open time,
hours_close time,
)
次のように
rest_opening_hoursテーブルがあります。 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
は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日目)と土曜日(7日目)の結果を(7日目ではなく)日曜日の1日目に返します。
DAYOFWEEK(NOW())= 1のとき、今日は日曜日(1日目)であり、h.days_of_week = 7のときは結果が "06:00"と返されます。 (ie、昨日の営業時間)h.hours_close < h.hours_openと推測しました。しかし、私は2つの結果を得ています: "06:00"と "23:00"は意味がありません。MySQLが2番目のケースを無視して、ちょうど両方を返すようなものです!
私はこれを使って周りを遊ぶのに過ごしたので、どこにもいないようです。
ありがとうございます!
ライアン
改正クエリ
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'
私の問題は、1がh.hours_closeあるので、私のクエリは(1)(7)前日、問題の日の両方を選択していることであることが表示されます> h.hours_open、もう1つはh.hours_closeです。< h.hours_open - これを1つの結果に分離する方法についての説明はありません。おそらく、私は前日のものを見ています。時間は開始時間よりも短くなります(つまり、次の日を終了します)。擬似コードで
:
if (closingtime < openingtime) {
return closing time from yesterday
} else {
return closing time from today
}
それはとても簡単です - なぜそれは私に非常に多くの気の問題を引き起こしていますか!?!?!?
ヘイMosty、あなたの返信のおかげで。私は、h.hours_close
Ryan
昨日のようにこの 'select dayofweek(now()、dayofweek(now()、interval 1 day))を使用する必要があります。 –
ありがとうMosty、that works私がやっていた-1よりも優れています。しかし、私はまだ同じ2つの結果を得ています...私は修正された質問を上記に入れました – Ryan