选择今年的日期和月份组
我正在制作一个活动页面,用户可以在其中创建活动,其关注者可以在其活动页面上查看活动。选择今年的日期和月份组
我想要做的是从表中选择事件日期在今年(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')
我认为你已经结束了这个问题。这可以通过简单地使用MySQLs DATE_FORMAT
function获取当年的所有事件并按日期排序来解决。
然后在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>';
}
不想听起来忘恩负义,但没有帮助。 – Frank
为什么不呢?如果你让我知道,也许我可以改善你的情况。 – Treffynnon
我是PHP的新手,我对你的整个代码感到困惑。警告:为foreach提供的无效参数() – Frank
在我的数据库,我存储日期为INT为UNIX时间戳,秒数自1月1日1970年这样,如果我要选择一个范围(这样一个公正的三月份),我可以使用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
数据类型,但我没有使用它。
您还可以使用'ORDER BY \'date \'ASC'从第一个到最后一个顺序获取事件。 – Tim
你可以使用函数的日期的年份部分。假设它是MySQL:
SELECT
*,
MONTH(event_date) AS 'month'
FROM events
WHERE YEAR(event_date) = YEAR(CURDATE())
ORDER BY month ASC
我没有使用MySQL的日期结构,但看到这样的代码后,它让我想进入它! – Tim
这些都是不错的捷径。我选择了更详细地演示更多功能,但这样更容易阅读! – Treffynnon
只是一个警告:大多数函数,像那些漂亮的日期函数,都是特定于供应商/ DBMS的。糟糕:你的SQL /代码不可移植。好处:减少网络/流量开销(客户端/服务器绕过参数),尤其是存储过程/视图。丑陋的:这些东西取决于服务器设置(你可能没有控制权)。始终检查手动和服务器设置。您的服务器可能在不同的时区运行! 关于日期/时间处理的另一个建议:如果您处理ISO格式的日期/时间和UTC时区,它将为您节省很多麻烦。 – shimofuri
我觉得Treffynnon的方法很不错。你也可以使用DATE_FORMAT(“%m”,event_date)来选择月份(我认为MySQL比PHP更快完成 - 而PHP更方便/可读)。 – AaL