繁体   English   中英

选择今年的日期,然后按月分组

[英]Select where date is in this year and group by month

我正在一个事件页面上,用户可以在其中创建事件,而其关注者可以在其事件页面上查看该事件。

我想做的是从事件日期在今年(2011)内的表中选择所有事件,因此,如果日期为2011-03-30 ,它将显示在March标头中,但如果是2012-03-30它不会显示直到明年。

因此,总的来说,我希望所有事件都显示在标题下,例如,一月,二月,三月。

因此,我的表结构为:

id                             int(11)
event_creator_user_id          int(11)
event_creator_user_username    varchar(255)
event_creator_user_first_name  varchar(255)
event_creator_user_last_name   varchar(255)
event_name                     varchar(255)
event_date                     date
event_time                     time
event_brief_location           varchar(255)
event_location_street          varchar(255)
event_location_town            varchar(255)
event_location_post_code       varchar(255)
event_description              text
event_create_date              datetime
type                           enum('a','b')

我认为您使问题复杂化了。 这可以通过使用MySQL的DATE_FORMAT函数简单获取当年的所有事件并按日期对事件进行排序来解决。

然后,在PHP中,您可以简单地遍历它们,当月份更改时,将打印出标题。 下面的代码应该使这一点更加清晰。

在PHP中:

$conn = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("mydbname");

$SQL = "
    SELECT *,
           UNIX_TIMESTAMP(`event_date`) AS event_date_timestamp
    FROM events
    WHERE DATE_FORMAT(event_date, '%Y') = 2011
      AND event_date > NOW()
    ORDER BY event_date ASC";

$result = mysql_query($SQL);

$current_month = '';
while ($event = mysql_fetch_assoc($result)) {
    $month = date('m', $event['event_date_timestamp']);
    if($current_month != $month) {
        $current_month = $month;
        echo '<h1>' . $current_month . '</h1>';
    }
    echo '<p>' . $event['event_name'] . '</p>';
}

您可以使用函数获取日期的年份部分。 假设它是MySQL:

SELECT 
   *,
   MONTH(event_date) AS 'month'
FROM events
WHERE YEAR(event_date) = YEAR(CURDATE())
ORDER BY month ASC

在我的数据库中,我将日期存储为与unix时间戳一样的整数,即自1970年1月1日以来的秒数。这样,​​如果我想选择一个范围(例如三月),则可以使用mktime

$query = mysql_query("SELECT * FROM `events` WHERE `date` > ".mktime(0,0,0,3,1,2011). " AND `date` < ".mktime(0,0,0,4,1,2011));

您可以这样循环数月:

for($i=1; $i<=12; $i++){
   $query = mysql_query("SELECT * FROM `events` WHERE `date` > ".mktime(0,0,0,$i,1,2011). " AND `date` < ".mktime(0,0,0,$i+1,1,2011));
   $monthName = date("F",mktime(0,0,0,$i,1,2011)); // full name of the month; use "M" for short-name
   // ... your code for printing the events here
}

我会帮助date数据类型,但我还没有使用过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM