2013-05-14 137 views
1

我要求用戶在某個應用程序中輸入開始日期和結束日期。然後我計算一下。在這兩個日期之間的星期。邏輯查詢計算周

我想獲取在給定時間段內每週創建的文檔。 我無法實現一個邏輯,這將幫助我獲取第一週,第二週,第三週等。

我將用它作爲數據庫的輸入,然後創建圖形。我使用PHP作爲服務器端語言。任何人都可以向我推薦算法。

例如:

Start date: 20/07/2012 

End Date: 19/02/2013. 

Total no. of days: 214. 

Total no. of weeks: 30 (30 weeks and 4 days) 

我要取的20/07/2012期間27/07/2012沒有。的文檔。直到15/02/2013。

+0

使用聚合函數()和組由今年年和周https://dev.mysql.com/doc/refman/5.5/en/date-and- time-functions.html – Waygood 2013-05-14 10:46:33

回答

0

沒有看到這裏你的數據庫結構是什麼,你需要通過WEEKOFYEAR

SELECT YEAR(doc_created) AS report_year, WEEKOFYEAR(doc_created) AS report_week, COUNT(*) AS doc_count 
FROM documents 
WHERE doc_created BETWEEN '2012-07-20' AND '2013-07-19' 
GROUP BY YEAR(doc_created), WEEKOFYEAR(doc_created) 

分組的樣本是不夠的,因爲週期可以重疊,明年,所以我們還應該包括一年。

possible results: 
year week docs 
2012 1  4 
2012 3  1 
2013 1  65 
2013 2  4 

正如你可以看到的2012周1將重疊2013年第1周,如果我們只是使用週數。

對於您的網格/圖形使用參考(年wk)和金額(文檔)
2012wk1是4,2012wk3像計數1個

+0

我已經處理了數據庫元素,我需要算法來在圖形圖像中實現這些細節,這是我創建的。目前我只能打印單日選擇的文檔數量。 – Ameya 2013-05-14 11:07:02

+0

上面的查詢每週將給出'report_year,report_week,doc_count'__,因此不需要算法,只需將數字插入網格或圖像。 (請查看http://phpchart.net/) – Waygood 2013-05-14 11:10:58

-1
Try this code: 



    $start_date = "20-07-2012"; 
    $end_date = "20-08-2012 "; 

    while($start_date){ 
     if(strtotime($start_date) > strtotime($end_date)){ 
      exit; 
     } 
     $start_date = strtotime("+7 day", strtotime($start_date)); 
     $start_date = date("d-m-Y", $start_date); 
     echo $start_date; 
     echo "<br/>"; 
    } 
+0

strtotime()在英國日期無法正常工作。如果可能的話,它會認爲它是美國的。所以01-03-2012將在1月3日的3月1日。 – Waygood 2013-05-14 11:19:58

+0

使用exit停止while循環?你是認真的嗎?! – Waygood 2013-05-14 11:22:38