显示按月分组的mysql表中的数据

时间:2011-09-10 12:02:57

标签: php mysql select

基本上我在表中有很多数据及其创建日期。我想显示表中的所有数据,但是在输出中它需要按日期顺序排列,然后在其上面创建月份标题。

即。

一月 数据1 DATA2 DATA3

二月 DATA4 DATA5

三月 DATA6 DATA7 DATA8 数据9

这可以从一个查询中获得吗?我正在使用php和mysql。

由于

表布局将类似于:

ID | Type | Content | User | Colour | Creation Date

目前这一切都是理论,但我将在今天和明天晚些时候创造它。我只是需要知道它是否可能。

3 个答案:

答案 0 :(得分:2)

我只是将月份添加到查询中,按日期排序查询,然后在输出阶段跟踪月份,并在每个月更改时插入新标题:

SELECT *, MONTH(thedate) AS month FROM thetable ORDER BY thedate;

在PHP中:

$lastmonth = "";
while ($row = mysql_fetch_assoc($queryresult))
{
  if (empty($lastmonth)) { $lastmonth = $row['month']; }

  if ($lastmonth != $row['month'])
  {
    $lastmonth = $row['month'];
    // print new month header
  }

  // print row
}

答案 1 :(得分:1)

$res = mysql_query( 'SELECT MONTHNAME(creation_date) AS month_name, data_name
                     FROM my_table ORDER BY creation_date' );
$currentMonth = null;
while( $row = mysql_fetch_assoc($res) ) {
    if( $currentMonth !== $row['month_name'] ) {
        echo '<h1>'.$row['month_name'].'</h1>';
        $currentMonth = $row['month_name'];
    }
    echo '<p>'.$row['data_name'].'</p>';
}

答案 2 :(得分:0)

将MONTH列添加到架构中,并从创建日期填充它。您需要两列才能执行此操作。

这听起来更像是报告功能,而不是事务性功能。如果将历史记录从OLAP数据库卸载到具有时间维度的报告星型模式中,则解决方案将很容易。它也会减少OLAP数据集的大小。