我正在尝试从头开始构建日历。我正在使用David Walsh(see link)编写的函数,这很棒。 他对每一天的细胞进行查询。 但是,我担心当脚本必须在每个渲染中运行30个查询时,它将是 sloooow 。
所以,我试图用另一个逻辑来思考,例如,在脚本开始时从X日期到Y日期进行大查询,然后在每一天检查特定日期是否有上一个查询中的事件。但我不知道该怎么做...... 所以,如果有人可以提供帮助,请大声呼喊!
感谢。
答案 0 :(得分:3)
而不是
/* keep going with days.... */
for($list_day = 1; $list_day <= $days_in_month; $list_day++):
$calendar.= '<td class="calendar-day">';
/* add in the day number */
$calendar.= '<div class="day-number">'.$list_day.'</div>';
/** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !!
IF MATCHES FOUND, PRINT THEM !! **/
$calendar.= str_repeat('<p> </p>',2);
$calendar.= '</td>';
if($running_day == 6):
$calendar.= '</tr>';
if(($day_counter+1) != $days_in_month):
$calendar.= '<tr class="calendar-row">';
endif;
$running_day = -1;
$days_in_this_week = 0;
endif;
$days_in_this_week++; $running_day++; $day_counter++;
endfor;
DO
/** QUERY THE DATABASE FOR AN ENTRY FOR THE PERIOD !!
IF MATCHES FOUND, STORE THEM !! **/
$entries = getEntriesFromDB($month,$year);
/* keep going with days.... */
for($list_day = 1; $list_day <= $days_in_month; $list_day++):
$calendar.= '<td class="calendar-day">';
/* add in the day number */
$calendar.= '<div class="day-number">'.$list_day.'</div>';
if ($entries[$list_day]):
/** ADD THE ENTRIES FOR THE DAY!! **/
endif;
$calendar.= str_repeat('<p> </p>',2);
$calendar.= '</td>';
if($running_day == 6):
$calendar.= '</tr>';
if(($day_counter+1) != $days_in_month):
$calendar.= '<tr class="calendar-row">';
endif;
$running_day = -1;
$days_in_this_week = 0;
endif;
$days_in_this_week++; $running_day++; $day_counter++;
endfor;
更严重的是,在第一种情况下,您有一个像
这样的查询SELECT date,event from entries where date = $date
现在你已经
了SELECT date,event from entries where date between $date_minus_one_month and $date
然后将结果存储在关联数组中,以天为单位进行索引。
答案 1 :(得分:0)
是的,我会和你一起......呃......大胆的建议。如上所述,在循环中运行查询是没有意义的。那你究竟需要什么帮助?