我的MySQL数据库中有事件(日期时间)。 天有0,1或更多事件。
我想显示即将到来的7天,并在每天下方列出当天发生的事件(如果有的话)。
这样做的最佳做法是什么?
最简单的是:
for(days) {
for(mysql_query_get_events) {
display_event
}
}
但它需要每天运行相同的大查询,我相信这是非常无效的。你会怎么做?
答案 0 :(得分:1)
一些事情:
SELECT * FROM events
WHERE event_date > NOW()
AND event_date < DATE_ADD(NOW(), INTERVAL 7 DAYS)
GROUP BY date
ORDER BY date ASC;
这将选择即将到来的7天内的所有活动
编辑:只需抓住所有事件,循环播放日期并不断将结果弹出堆栈。 E.g:
events = sql_query()
days = range(now, now + 7 days)
for (day in days) {
echo day
while events[0].date = day {
echo array_shift(events)
}
}
答案 1 :(得分:1)
这是非常主观的,但从数据库中获取所有即将发生的事件可能会更有效,然后迭代结果。
mysql_query_get_upcoming_events
displaying_day = first_day
for(result_row){
// !! Do not use '!=', use < or > depending on your intended display order
while(displaying_day != result_row['day']){
displaying_day++
display_new_day()
}
display_event()
}
这是一个较大的查询,而不是多个较小的查询。
答案 2 :(得分:0)
处理需要在MySQL端或PHP端完成。如果您希望避免在MySQL端放置多个查询,您需要发出一个查询,以获取接下来七天的所有结果:
SELECT `event_name`, `event_time` FROM `events`
WHERE `event_time` BETWEEN CURRENT_DATE() AND (CURRENT_DATE() + INTERVAL 7 DAY)
然后重新处理结果集。检查每个结果的日期,并将其放在与特定日期相对应的数组中。
while ( $event = mysql_fetch_array( $result ) ) {
$event_array[date( 'l', $event['event_time'] )] = $event;
}
另一种方法是执行七个连续的查询。您可以对尝试进行基准测试,以确定哪个更快。