JQueryのフルカレンダーイベントを使用しています。これまでのところ、制限によってイベントをロードするオプションがないことを知っています。
月表示では、1日に100のイベントがあると、テーブルセルが非常に大きくなります。1日10イベントに制限したいと思います。
私がやろうと思ったのは、PHPを使用してサーバー側でそれを行うことでした。日付範囲を指定してPHPを使用してすべてのイベントをロードしているので、毎日ロードし、1日あたり10イベントに制限すると思いました。
これは私がPHP側に持っているものです:
if ($currView == 'month') //curr view is the current view of the calendar
{
$start = $_GET['start']; //gets from the calendar usually start of month
$end = $_GET['end']; //gets from calendar usually end of month
//some array to store all events before using json_encode
$limitEvents = array();
$limit = 10;
//loop through from start till end by 1 day incremental
for ($i = $start; $i < $end; $i+=strtotime($i, "+1 day"))
{
//make the end of day to be the current day but 23:59:59
$endOfDay = date('m/d/Y', $start);
$endOfDay = strtotime($endOfDay . ' 23:59:59');
//load the events from DB using date range which is 1 day and limit of events
$loaded = $this->loadDataFromDB($start, $endofDay, $limit);
//merge the arrays
array_merge($limitTasks, $loaded);
}
}
このコードの問題は、実行しようとすると最適ではないことです。毎日ループし、1日ごとにクエリを実行し、非常に長い時間がかかり、タイムアウトすることさえあります。
私の質問は、MySQL側でこれをどのように行うのですか?月の初めから月末までの日付範囲を指定します。PHP側で毎日ループしてデータをロードする代わりに、MySQL側でそれを行います。たとえば、クエリは次のようになります。
SELECT *
FROM Events_Table
WHERE Ev_Date BETWEEN :startMonth AND :endMonth
(have extra query to load by days within given start and end month
and have LIMIT 10 per day)
上記のクエリを完了できない場合、括弧内のテキストは有効なクエリで転送する必要があります。これにより、1日あたり10のイベントが選択され、31日あるため、約310のイベントが選択されます。
誰かがより良い解決策を持っているなら、助けてください。