私は(私にとって)巨大なSQLの問題を扱っています。id、name、from、to の 4 つの列を持つ「timeshifts」というテーブルがあります。最後の 2 つのタイプは TIME です。
現在: 3 つのタイムシフトがあります: 06:00 - 14:00 14:00 - 22:00 22:00 - 06:00
ここで、現在の時刻の正しいシフトを見つける必要があります (これは魅力的な方法です) が、現在のシフトに属する適切なレコードを見つけることができません。すなわち。user_times というテーブルには、日付と時刻の値が別々のフィールドが含まれています。現在のタイムシフトによると、タイムシフトに属するレコードを見つける必要があります。最初の 2 シフトは問題ありませんが、3 番目のシフトは午前 0 時を過ぎます。それが私の問題です。
以下は、真夜中までの適切なシフト、イベントを検索するクエリです。
SELECT
FLOOR(SUM(time_sum) / 60) AS th,
MOD(SUM(time_sum), 60) AS tm,
t.*
FROM
ur_user_times ut,
ur_timeshifts t
WHERE CURTIME() >= IF (
t.timeshift_to < t.timeshift_from,
0,
ADDTIME(t.timeshift_from, "00:15")
)
AND CURTIME() <= ADDTIME(
IF (
t.timeshift_to < t.timeshift_from,
ADDTIME(t.timeshift_from, "10:00:00"),
t.timeshift_to
),
"00:15"
)
AND ut.`date` BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()
AND ut.`start` BETWEEN ADDTIME(t.`timeshift_from`, "-10:00:00") AND ADDTIME(t.`timeshift_to`, "-10:00:00")
AND ut.user_id = 40
ut.start は、関心のある時間値です。