我正在制作一个活动页面,用户可以在其中创建活动,他们的关注者可以在活动页面上查看活动。
我想要做的是从事件日期在今年(2011年)的表中选择所有事件,因此如果日期为2011-03-30
,它将显示在March标题中,但如果是2012-03-30
直到明年它才会显示出来。
总的来说,我希望所有事件都显示在标题下,例如1月,2月,3月。
我的表格结构如下:
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')
答案 0 :(得分:2)
我认为你的问题让你复杂化了。这可以通过使用MySQL 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>';
}
答案 1 :(得分:2)
您可以使用函数获取日期的年份部分。假设它是MySQL:
SELECT
*,
MONTH(event_date) AS 'month'
FROM events
WHERE YEAR(event_date) = YEAR(CURDATE())
ORDER BY month ASC
答案 2 :(得分:1)
在我的数据库中,我将日期存储为int作为unix时间戳,自1970年1月1日以来的秒数。这样,如果我想选择范围(例如3月份),我可以使用{{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
}
数据类型,但我没有使用它。