PHP和MySQL日历问题

时间:2009-12-09 11:39:01

标签: php mysql calendar

我正在尝试从头开始构建日历。我正在使用David Walsh(see link)编写的函数,这很棒。 他对每一天的细胞进行查询。 但是,我担心当脚本必须在每个渲染中运行30个查询时,它将是 sloooow

所以,我试图用另一个逻辑来思考,例如,在脚本开始时从X日期到Y日期进行大查询,然后在每一天检查特定日期是否有上一个查询中的事件。但我不知道该怎么做...... 所以,如果有人可以提供帮助,请大声呼喊!

感谢。

2 个答案:

答案 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>&nbsp;</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>&nbsp;</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)

是的,我会和你一起......呃......大胆的建议。如上所述,在循环中运行查询是没有意义的。那你究竟需要什么帮助?