Я пишу, пытаясь создать календарь с нуля. Я использую функцию, написанную Дэвидом Уолшем (см. Ссылку), и это здорово. Он выполняет запрос для каждой ячейки дня. Но, боюсь, что когда script нужно будет запускать 30 запросов в каждом рендере, это будет похоже на sloooow.
Итак, я пытался мыслить в другой логике, например, сделать большой запрос с даты X до даты Y в начале script, а затем, в каждый день, проверить, действительно ли этот конкретный день имеет событие в предыдущем запросе. Но я не знаю, как это сделать... Итак, если кто-то может помочь, пожалуйста, кричите!
Спасибо.
Вместо
/* 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;
делать
/** 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
Затем сохраните результаты в ассоциативном массиве, индексированном по дням.
Да, я бы пошел с твоим... эм... смелым предложением. Как указано выше, нет смысла запускать запрос в цикле. Что именно вам нужна помощь, тогда?