2016-07-26 81 views
0

我在創建Mysql查詢時遇到了麻煩,它會根據當前指定的時間和時間表爲我提供一個id列表。我有一個表像這樣:帶查詢時間表的MySQL SELECT查詢

ID - int 
0f - time (monday from) 
0t - time (monday till) 
1f - time (tuesday from) 
1t - time (tuesday till) 
2f - time (wednesday from) 
2t - time (wednesday till) 
3f - time (thursday from) 
3t - time (thursday till) 
4f - time (friday from) 
4t - time (friday till) 
5f - time (saturday from) 
5t - time (saturday till) 
6f - time (sunday from) 
6t - time (sunday till) 

時「直到」值刨絲器超過24小時,越低則「從」價值的問題開始。 例如,它是凌晨1點,我需要選擇所有現在工作的ID,一個工作時間從早上10點到凌晨2點。

UPD這是我真實的數據表的例子:

ID Name f0 t0 f1 t1 f2 t2 f3 t3 f4 t4 f5 t5 f6 t6 
23 test1 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 01:00:00 11:00:00 01:00:00 11:00:00 23:00:00 
24 test2 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 02:00:00 12:00:00 02:00:00 12:00:00 01:00:00 
25 test3 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 02:00:00 12:00:00 02:00:00 12:00:00 01:00:00 
27 test4 11:00:00 23:00:00 11:00:00 23:00:00 11:00:00 23:00:00 11:00:00 23:00:00 11:00:00 23:00:00 11:00:00 23:00:00 11:00:00 23:00:00 
28 test5 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 10:00:00 23:00:00 
29 test6 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 10:00:00 23:00:00 10:00:00 23:00:00 
30 test7 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 01:00:00 12:00:00 03:00:00 12:00:00 03:00:00 12:00:00 01:00:00 
32 test8 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 10:00:00 22:00:00 10:00:00 22:00:00 
33 test9 11:00:00 22:00:00 11:00:00 22:00:00 11:00:00 22:00:00 11:00:00 22:00:00 11:00:00 22:00:00 11:00:00 22:00:00 11:00:00 22:00:00 
34 test10 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 09:00:00 22:00:00 
35 test11 18:00:00 02:00:00 18:00:00 02:00:00 18:00:00 02:00:00 18:00:00 02:00:00 18:00:00 04:00:00 18:00:00 04:00:00 18:00:00 02:00:00 

,我需要寫MySQL查詢選擇ID的,現在是開放的,隨時

+1

所以不要限制從0-> 23的時間值。 MySQL時間類型可以達到+/- 839小時。將小時25視爲「明天」,小時-1視爲「昨天」。 –

+0

好吧,但我仍然不明白如何創建一個可以算作這個的查詢? @MarcB –

+0

你能舉一個更具體的例子來說明你想要的嗎?並且填寫整個表格。什麼是你的「參數」,以及在這個例子中你想要返回的ID的確切列表是什麼? – Caius

回答

0

我不是完全確定你在這裏要求什麼。所以我會提供一些觀察。

首先,鑑於任何DATETIMESTAMP,或DATETIME值,例如名爲datestamp列,這個公式會給你個星期的星期一,正是午夜。 (有神奇的一點點這個公式中,因爲MySQL的第0天正好是星期日。)

FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7)) 

然後,您可以在一個小時內任意數量的補充。因此,例如,如果您在週三的23:00開始工作8小時,則在本週開始後開始71(24 + 24 + 23)小時。所以它開始於

FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -2, 7)) 
      + INTERVAL 71 HOUR 

在這個星期,8小時後,這個轉變的結束是在這個時候。

FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -2, 7)) 
      + INTERVAL 71 HOUR 
      + INTERVAL 8 HOUR 

所以,也許(???)你想表示你的「星期四,直到」各種各樣的項目,如一週開始後小時。

這只是一種方法來表示在您的dbms中重複出現的每週事件,同時仍然可以獲得MySQL日期算法的優勢。