2013-05-14 1 views
1

Я прошу пользователя ввести дату начала и окончания в определенном приложении. Тогда я вычисляю no. недель между этими двумя датами.Логический запрос для расчета недель

Я хочу получать документы, созданные за неделю в данный период времени. Я не могу реализовать логику, которая поможет мне получить первую неделю, вторую неделю, третью неделю и т. Д.

Я буду использовать это как вход в базу данных, а затем создать граф. Я использую 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

ответ

0

Не видя вашей структуры базы данных здесь пример того, что вам требуется

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) 

группировку по weekofyear не достаточно, поскольку период может перекрываться в следующем году, так что мы должны также включать в себя год.

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

+0

Вышеупомянутый запрос даст 'report_year, report_week, doc_count' __ для каждой недели__, поэтому не требуется никакого алгоритма, вы просто подключаете числа в свою сетку или изображение. (проверьте http://phpchart.net/) – Waygood

-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 даст 3 января не 1 марта. – Waygood

+0

Использование exit для остановки цикла while? ты серьезно?! – Waygood

 Смежные вопросы

  • Нет связанных вопросов^_^