【问题标题】:PHP max number of days in a pool of datesPHP 日期池中的最大天数
【发布时间】:2010-11-11 15:41:36
【问题描述】:

大家好,我正在尝试获取天数数据库中的最大天数。例如,(Sat, Mon, Tue, Mon, Tue, Fri, Thu, Sun, Mon)的数据库应该打印“Mon”作为结果(作为最大出现次数)。但我卡住了!!数据库很奇怪。看看吧。

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; 但它不显示任何内容。帮助!! :(

【问题讨论】:

  • 因为你用的是mysql_query()我把sql重新标记为mysql

标签: php mysql datetime group-by max


【解决方案1】:

试试这个查询:

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

【讨论】:

  • 没问题!如果您需要对此解决方案的任何部分进行解释,请告诉我。
【解决方案2】:

编辑 - 糟糕,不熟悉 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多