2016-06-24 91 views
1

我讀從數據庫中圖書館開放時間,所以我得到返回類似:如何訂購週日(0)包括部分周的週日?

{ 
    "5":{ // library ID 
     "4":{ // interval ID 
     "statement":"", 
     "start_date":"5th Jan 2015", 
     "end_date":"1st Mar 2015", 
     "hours":[ 
      { 
       "day_of_week":"Sun", 
       "opening_time":"12am", 
       "closing_time":"12am", 
       "is_closed":true, 
       "open_24hrs":false 
      }, 
      { 
       "day_of_week":"Mon", 
       "opening_time":"9am", 
       "closing_time":"5pm", 
       "is_closed":false, 
       "open_24hrs":false 
      }, 
      { 
       "day_of_week":"Tue", 
       "opening_time":"9am", 
       "closing_time":"5pm", 
       "is_closed":false, 
       "open_24hrs":false 
      }, 

每個「正規」的開放時間與同爲每個「變異」,其中的間隔可以是任何東西從一天到七天。 (這裏我已經預處理了日期數字以縮短日期名稱)。我通過AJAX/PHP從PostGreSQL獲取數據。我的問題是,如果時間間隔可能是從一天到幾周的任何時間(但一週或一週以上的時間間隔僅存儲一個小時),我該如何正確排定變化的日期,並且可以從任何一天開始,例如:星期五,星期六,星期日,星期一長週末(在這種情況下,日數是5,6,0,1,因此按照週日,週一,週五,週六排序)?

我最初的想法是:

  • 檢查間隔了整整一個星期
  • 如果不是,請檢查是否星期天走過
  • 如果不是,容易被數訂購
  • 如果週日遍歷,獲得開始日期並訂購直至星期日然後 重置爲0(用於星期天)並且繼續到開始之前的最高數字 天

但我想知道這是否全是矯枉過正,我可以使用order by子句或類似的方法來完成相同的工作,例如:Possible to create a query that sorts by day of week?

任何想法非常讚賞。

回答

0

我會爲了它像這樣:

ORDER BY interval.start_date, hours.day_of_week, hours.opening_time 
+0

但是,這不是要給我一樣長週末例子的結果嗎? IE瀏覽器。 0,1,5,6 - 星期日,星期一,星期五,星期六 –

+0

啊,我明白你的意思了。在這種情況下,無法知道哪些'hours.day_of_week'應該是間隔的第一個日期,而不必將每個'hours.day_of_week'轉換回日曆日期。你能夠改變模式來設計這個問題嗎? –

+0

嗨丹尼爾,將每個dow轉換爲日曆日期的問題意味着即使間隔時間爲幾個星期(如暑假),我也必須在每個間隔中存儲每個日期的記錄。雖然回想一下模式可能是個好主意 - 也許是每個小時記錄的「訂單」字段?例如。 day_num:0,1,5,6/dow:Sun,Mon,Fri,Sat/order:3,4,1,2 –