Выбрать объекты событий FullCalender.io (JSON) из базы данных для указанного c диапазона дат - PullRequest
1 голос
/ 10 января 2020

У меня огромная база данных и множество событий. Каждый раз, когда я go на главной странице календаря (ежемесячный просмотр) загружаются все существующие события в базе данных, несмотря на то, что я смотрю только текущий месяц. На данный момент моя страница html имеет размер более 3 МБ и имеет тенденцию замедлять работу вкладки браузера.

Чтобы решить эту проблему, я начал изменять код для извлечения только событий текущего месяца как json. К сожалению, даты начала и окончания диапазона дат не работают - страница все еще извлекает все события из базы данных. Я уже провел несколько часов исследований и много настроек.

Я использую FullCalendar V3.10

Пока мне удалось получить мои события FullCalendar.io - у меня есть два источника событий - поэтому я использовал:

eventSources: [
    {
        url: 'include/load-calendar-event.php', // use the `url` property
        color: '#008000',   
    },              
    {
        url: 'include/load-calendar-event-retour.php', // use the `url` property
        color: '#008000',
    },                          

    // any other sources...
],

Соответствующие два файла для извлечения событий почти идентичны - так что одного должно быть достаточно:

load-calendar-event. php

require_once('bdd.php');
$sql = "SELECT * FROM messages"; // this selects all rows
$req = $bdd->prepare($sql);
$req->execute();
$events = $req->fetchAll();

$data = array();

foreach($events as $event) {
    $start = explode(" ", $event['start']);
    $end = explode(" ", $event['end']);
    if($start[1] == '00:00:00'){
        $start = $start[0];
    }else{
        $start = $event['start'];
    }
    if($end[1] == '00:00:00'){
        $end = $end[0];
    }else{
        $end = $event['end'];
    }   

    $data[] = array(    
        'id'=> $event['id'],
        'title'=> $event['title'],                              
        'start'=> $start,
        'end'=> $end,
        'color'=> $event['color']   
    );
}

echo json_encode($data);

При вызове страницы календаря браузеры выполняют следующие вызовы - обратите внимание на дату (2020-01-01 - 2020-02 -01) и формат данных:

...include/load-calendar-event.php?start=2020-01-01&end=2020-02-01&_=1578601056565

и

...include/load-calendar-event-retour.php?start=2020-01-01&end=2020-02-01&_=1578601056566

снимок экрана звонка в firebug

Формат даты событий сохранено в базе данных в следующем формате (ГГГГ-ММ-ДД ЧЧ: мм: сс):

2020-01-11 10:00:00

Вопрос:

Любая идея, как получить события только для текущего месяца?

1 Ответ

1 голос
/ 10 января 2020

Почему вы выбираете все строки в таблице и перебираете их?

Вам необходимо обновить запрос, чтобы получить начальное и конечное значения, которые вы передаете в качестве параметра $_GET.

require_once('bdd.php');
$sdate = $_GET['start']; //LIKE THIS
$edate = $_GET['end']; //AND THIS
$sql = "SELECT * FROM messages WHERE date >= ".$sdate." AND date <= ".$edate; // this selects all rows.  Change 'date' to whatever your column name is in the database.
$req = $bdd->prepare($sql);
$req->execute();
$events = $req->fetchAll();





$data = array();

foreach($events as $event) {

    $start = explode(" ", $event['start']);
    $end = explode(" ", $event['end']);
    if($start[1] == '00:00:00'){
        $start = $start[0];
    }else{
        $start = $event['start'];
    }
    if($end[1] == '00:00:00'){
        $end = $end[0];
    }else{
        $end = $event['end'];
    }   

    $data[] = array(    
        'id'=> $event['id'],
        'title'=> $event['title'],                              
        'start'=> $start,
        'end'=> $end,
        'color'=> $event['color']   
    );

}


echo json_encode($data);

Это можно сделать проще, просто используя * Функция даты 1013 * генерирует даты начала и окончания вместо передачи переменных с параметрами строки запроса. Хотя это даст вам больше гибкости. Вы даже можете включить некоторые операторы if / else для генерации разных запросов, если эти значения установлены.

См .: https://www.php.net/manual/en/function.date.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...