显示活动和日期的最佳做法

时间:2011-07-12 19:35:37

标签: php mysql

我的MySQL数据库中有事件(日期时间)。 天有0,1或更多事件。

我想显示即将到来的7天,并在每天下方列出当天发生的事件(如果有的话)。

这样做的最佳做法是什么?

最简单的是:

for(days) {
   for(mysql_query_get_events) {
      display_event
   }
}

但它需要每天运行相同的大查询,我相信这是非常无效的。你会怎么做?

3 个答案:

答案 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;
}

另一种方法是执行七个连续的查询。您可以对尝试进行基准测试,以确定哪个更快。