2012-10-05 83 views
1

我正在處理(對我來說)巨大的SQL問題。我有一張名爲「timeshifts」的表格,其中有4列: id,name,from和to。最後兩個類型是TIME。SQL處理午夜

現在:我有三個timeshifts: 06:00 - 14:00 14:00 - 22:00 22:00 - 06:00

現在,我必須找到當前時間正確移(它像一個魅力),但我找不到屬於當前轉變的適當記錄。 IE瀏覽器。名爲user_times的表包含具有單獨的日期和時間值的字段。根據目前的時間轉換,我必須找到屬於時間轉換的記錄。前兩班沒有問題,但第三個是午夜,這是我的問題。

這裏是通過午夜找到合適的移位,事件查詢:

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是我們感興趣的時間價值。

+1

什麼是你的問題?它看起來像你已經有一個查詢,做你想做的。 –

+0

沒有。它沒有。讓我們假設我們有02:32(上午)。它應該在22:00到06:00之間找到記錄,但MySQL不會在22:00以上(通過午夜)檢查,但向下。 – Mateusz

+0

你說:「這是查詢發現適當的轉變,通過午夜的事件」。所以,再一次:你的問題是什麼? –

回答

2

試試這個:

select * 
from timeshifts ts, 
usertimes ut 
where 
(ts.from < ts.to and ut.start >= ts.from and ut.start <= ts.to) OR 
(ts.from > ts.to and (ut.start >= ts.from or ut.start <= ts.to)) 
+0

你的代碼適合我!坦克! – Mateusz