PHP максимальное количество дней в пуле дат - PullRequest
1 голос
/ 11 ноября 2010

Эй, ребята, я пытаюсь получить максимальное количество дней в базе данных дней.Например, база данных (сб, пн, вт, пн, вт, пт, чт, вс, пн) должна выводить «Пн» как результат (являющийся максимальным числом событий).Но я застрял!База данных странная.Посмотрите.

time_id           time_duration

 1              2010-10-15 10:05:00
 1              2010-10-15 10:10:00
 1              2010-10-15 10:15:00
 2              2010-10-16 10:20:00
 2              2010-10-16 10:25:00
 2              2010-10-16 10:30:00
 3              2010-10-17 10:35:00
 3              2010-10-17 10:40:00
 3              2010-10-17 10:45:00
 4              2010-10-18 10:50:00
 4              2010-10-18 10:55:00
 4              2010-10-18 11:00:00
 4              2010-10-18 11:05:00
 4              2010-10-18 11:10:00
 5              2010-10-19 11:15:00
 5              2010-10-19 11:20:00
 5              2010-10-19 11:25:00

Итак, сначала нам нужно сгруппировать time_id, чтобы получить время начала и окончания.Результат должен быть:

  1: "Start 2010-10-15 10:05:00  -  End 2010-10-15 10:15:00"
  2: "Start 2010-10-16 10:20:00  -  End 2010-10-16 10:30:00"
  3: "Start 2010-10-17 10:35:00  -  End 2010-10-17 10:45:00"
  4: "Start 2010-10-18 10:50:00  -  End 2010-10-18 11:10:00"
  5: "Start 2010-10-19 11:15:00  -  End 2010-10-19 11:25:00"

И тогда мы получим самый обычный день недели.Итак, самое забавное - это понедельник. Результат должен быть понедельник.

Вот что я сделал до сих пор ...

  $dates = mysql_query("SELECT DATE_FORMAT(MAX(time_duration), '%a') 
                          AS max_days FROM timeDuration 
                          GROUP BY time_id
                          ORDER BY time_id");

  while($row = mysql_fetch_array($dates)) {
  $maxDayOfSign = $row['max_days'];}?>

Не могли бы вы указать мне, куда я идунеправильно?Я не получаю ошибок, когда отображаю его, используя echo $maxDayOfSign;, но он ничего не отображает.Помогите!!(

Ответы [ 2 ]

3 голосов
/ 11 ноября 2010

Попробуйте этот запрос:

SELECT DATE_FORMAT(`time_duration`, '%a') AS `max_days`,
    COUNT(*) AS `day_count`
FROM `timeDuration`
GROUP BY `max_days`
ORDER BY `day_count` DESC
LIMIT 1
1 голос
/ 11 ноября 2010

РЕДАКТИРОВАТЬ - Ой, не был знаком с TIME_FORMAT% a.Вы, вероятно, не хотите этого, но если вы склонны выполнять больше работы в PHP, см. Ниже.

Я не уверен, как вы будете переходить от даты к дате недели в SQL.Я не уверен, что это можно сделать, и если это так, я уверен, что это зависит от вашей базы данных (вы не упомянули - MySQL, MS, Oracle, PostGre?)

Я бы предложилВы делаете это на стороне PHP с помощью mktime () и date ().Получите ваш список дат в простом массиве, затем

function dateToDayOfWeek($y, $m, $d)
{
   return date('D', mktime($y, $m, $d));
}

function dayOfWeekCounter($dateArr)
{
    $arr = array('Mon' => 0, 'Tue' => 0, ...., 'Sun' => 0);
    foreach ($dateArr as $curDate)
    {
          $y = //you worry about parsing
          $m = //
          $d = //
          $arr[dateToDayOfWeek($y,$m$d)]++;
    }
    return $arr
}
...