基本上我在表中有很多数据及其创建日期。我想显示表中的所有数据,但是在输出中它需要按日期顺序排列,然后在其上面创建月份标题。
即。
一月 数据1 DATA2 DATA3
二月 DATA4 DATA5
三月 DATA6 DATA7 DATA8 数据9
这可以从一个查询中获得吗?我正在使用php和mysql。
由于
表布局将类似于:
ID | Type | Content | User | Colour | Creation Date
目前这一切都是理论,但我将在今天和明天晚些时候创造它。我只是需要知道它是否可能。
答案 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数据集的大小。