2016-07-04 16 views
0

大家下午好。使用PHP创建议程视图MySQL - 按年份和月份划分获取的MySQL行

我有这样一个组织的MySQL表:

| ID | Date  | Some_Information   | 
+----+------------+----------------------------+ 
| 1 | 2016-03-02 | A note about this day... | 
| 2 | 2016-03-22 | A note about that day... | 
| 3 | 2016-04-05 | Another note...   | 

我需要一个类似的方式来显示这些数据Google Calendar app's agenda view。要做到这一点,我应该:

  1. 划分取得的行,已按日期按月排序;
  2. 在显示对应于每个月的数据(比如说3月)之前,显示一个<div>,并在相应月份标出一些标题。

有人可以告诉我,如果这是可能的,以及如何?

+2

首先,使用日期数据类型存储日期。 – Strawberry

+0

有没有你尝试过的任何代码? – Shank

+0

@Strawberry,_of course_我使用正确的数据类型存储日期。以上示例仅用于说明目的。 – Gabriel

回答

0

我做了一些研究。我用简单的方法解决了这个问题。

我用这个查询结果取上个月,有增量变动混合,命名为$offset,并把它在一个用于循环:

$offset = 1; 
$sub_offset = $offset - 1; 
$query = "SELECT * FROM table WHERE (date >= last_day(now()) + interval 1 day - interval ".$offset." month and date <= last_day(now()) + interval 1 day - interval ".$sub_offset." month) ORDER BY date DESC"; 

for周期的开始,我申报一次$offset,回显月份标题,执行查询并通过whilemysqli_fetch_assoc()显示其结果。然后我递增$offset变量,并且for周期重复,直到我希望它显示几个月。

0

的MySQL:

SELECT 
    table.ID, 
    table.date, 
    table.Some_Information, 
    MONTH(table.date) AS m, 
    YEAR(table.date) AS y 
FROM table 
ORDER BY table.date DESC 

PHP:

$lastYm = ''; 
foreach($result as $row) { 
    $ym = $row['y'] . '-' . $row['m']; 
    if($ym != $lastYm) { 
     echo '<div class="month">' . $row['m'] . '</div>'; 
     $lastYm = $ym; 
    } 
    echo '<div class="info">' . $row['Some_Information'] . '</div>'; 
} 
+0

谢谢你的版本,但我发现使用这个代码来实现我想要的东西非常棘手。 – Gabriel