2013-07-01 2 views
2

Я рассчитываю рассчитать количество рабочих дней недели и количество дней выходных дней от данных, которые я извлекаю из базы данных MySQL.Подсчет количества рабочих дней и выходных дней с использованием PHP/MySQL

Время от БД отформатирован следующим образом: 2013-07-01 07:00

Это то, что я до сих пор:

function isWeekend($date) { 
    $check = date("w", strtotime($date)); 
     if ($check == 6 || $check == 0) { 
      return 1; 
     } 
     else { 
      return 0; 
     } 
} 

$query = mysql_query ("SELECT date from jobcards"); 

while ($row = mysql_fetch_assoc($query)) { 
    $date = $row['date']; 
    $date_check= isWeekend($date); 

    if ($date_check == 1) { 
    ++$weekend; 
    } 
    else { 
    ++$workday; 
    } 

} 

мне нужно найти способ, чтобы сосчитать дней, используя mysql, есть ли такой способ или более элегантный способ улучшить PHP-код?

Также, если у меня есть несколько записей в базе данных с тем же диапазоном дат, но в другом примере времени: 2013-07-01 07:00 и 2013-07-01 07:30 это будет считаться двумя рабочими днями, как я бы предотвратить это?

Спасибо.

ответ

8

Посмотрите на WEEKDAY функции, и сравнить его с 6/5 в воскресенье/суббота (соответственно)

Ваш SQL будет выглядеть примерно так:

SELECT SUM(IF(WEEKDAY(date) >= 5, 1, 0) AS WeekendCount, 
     SUM(IF(WEEKDAY(date) < 5, 1, 0) AS WeekdayCount 
FROM jobcards 

Существует аналогичный ответ здесь: MySQL Weekday/Weekend count - Part II

Исправлена) из ПЧ будучи помещен в неправильном месте

+0

Это решило его спасибо так много, я должен был изменить запрос немного, хотя, ваши Скобки были в неправильном месте :) – user2429578

+0

Говоря о том, как я бы выбрал 1 запись в день? если есть несколько записей за один день – user2429578

+0

Просьба представить структуру таблицы, если вы хотите, чтобы мы дали вам ответ на вопрос «несколько записей в день» вашего вопроса. – nrathaus

1
SELECT SUM(IF(DAYOFWEEK(date) BETWEEN 2 AND 6,1,0) AS weekdays, 
SUM(IF(DAYOFWEEK(date) NOT BETWEEN 2 AND 6,1,0) AS weekends, 
FROM jobcards 
0
SELECT date, 
sum(date) total, 
sum(if(date_format(date,'%w') between 1 and 5),1,0) weekday, 
sum(date) - sum(if(date_format(date,'%w') between 1 and 5),1,0) weekend 
from jobcards 
0

Если вы хотите сделать это в SQL, вы можете решить проблему временной метки с помощью DATE() функции MySQL, а также функцию DAYOFWEEK() считать ваши будни/выходные (Обратите внимание, что число дней для Sat/Sun 7/1 в MySQL, а не 6/0, как в PHP). Таким образом, чтобы подсчитать отдельные записи буднего дня это будет выглядеть примерно так:

SELECT COUNT(*) FROM jobcards WHERE DAYOFWEEK(DATE(jobcards.date)) BETWEEN 2 AND 6; 
Смежные вопросы