Datatables - фильтровать SQL-запрос по значениям bootstrap-datepicker - PullRequest
0 голосов
/ 14 марта 2019

У меня есть 2 средства выбора даты начальной загрузки (# начало, # конец) и таблица данных, которая возвращает 150.000 строк из MS SQL Server через PHP. Я хочу, чтобы по умолчанию дата начала была на 7 дней раньше, а дата окончания - сегодня.

Мне нужно найти способ отфильтровать запрос Sql (в файле PHP) с условием WHERE между значениями #start и #end datepicker. Если я не использую фильтр, возвращаемый JSON составляет 60 МБ, что приводит к зависанию браузера иследовательно, я не могу даже отфильтровать Datatable на клиенте.

Я уже использовал $ .fn.dataTable.ext.search.push для фильтрации Datatable на клиенте, и он работает, но я хочу отфильтроватьвывод JSON из запроса Sql до его возвращения в браузер.

Как я могу динамически передать эти значения даты через ajax.url в Sql Query, который находится в бэкэнд-файле PHP?

 var curdate = moment().subtract(7, 'day').toDate();

 $( '#end' ).datepicker( 'setDate', new Date() );
 $( '#start' ).datepicker( 'setDate', curdate );

 var start = $('#start').val();
 var end   = $('#end').val();

 $("#start").datepicker({ language: 'el', autoclose: true,              
          onchangeDate: function () { 

        var start = $('#start').val();
        table.ajax.url('queries.php?q=employees_full&start='+start'&end='+end); //do i miss a + here??
        //table.ajax.reload();
          table.draw(); }});

 $("#end").datepicker({ language: 'el', autoclose: true,
          onchangeDate: function () {  
 var end = $('#end').val();
      table.ajax.url('queries.php?q=employees_full&start='+start'&end='+end); //do i miss a + here??
       //table.ajax.reload();table.draw(); }});


 $('#start, #end').change(function () {
       //table.ajax.url('queries.php?q=employees_full&start='+start+'&end='+end);
        // table.ajax.reload();            
           table.draw();          
        }); 

1) В чем разница между table.ajax.reload () и table.draw?

2) я также получаю сообщение об ошибке в выводе JSON «Преобразование не удалось при преобразовании даты и / или времени из символьной строки».. Возможно, значение #start datepicker не определено, я не знаю, почему ??

3) Правильный ли порядок команд?

4) Даты в DatePicker имеют форматдд / мм / ггг, но в Sql Query query.php? q = employee_full находятся в формате гггг-мм-дд. Я использую подготовленные операторы и использовала следующее:

  (CONVERT(date,SUBSTRING(CONVERT(varchar, ?, 100), 4, 3) +SUBSTRING(CONVERT(varchar, ?, 100), 1, 3)+SUBSTRING(CONVERT(varchar, ?, 100), 7, 4)))

И

  $stmt = sqlsrv_prepare( $conn, $sql , array(&$_GET["start"],&$_GET["start"],&$_GET["start"]));

Дата данных:

 var table = $('#example').DataTable({

//"serverSide": true,
"ajax" : { url: 'queries.php?q=employees_full&start='+start'&end='+end ,
           dataType: "json",
            dataSrc: '' },
"order": [[ 5, "desc" ]],     
"autoWidth": true,
"deferRender": true ,
"columns": [
      { "data": "username", "title": "Username" }] 

});

РЕДАКТИРОВАТЬ 15/3/19

После долгих исследований я дошел до этого.

Я инициализирую средства выбора даты начальной загрузки и с помощью опции ajax.data я передаю параметры (объекты даты) в PHP-запрос Sql.

1) Лучше передать параметры как датуобъекты вместо строк, чтобы преобразование и сравнение в Sql Query было проще?

2) Должна ли инициализация Datepickers быть до или после Datatable?

3) Должен ли я использовать 2события .change и .on ('changeate') для указателей даты, чтобы оба значения были установлены до iнитиализация данных?

Когда я загружаю страницу, я получаю ошибку: input1 не определен

, и после этого, когда я выбираю разные даты, я получаю TypeError: таблица не определена.Я до сих пор не могу найти правильный порядок команд, которые я должен использовать.

Любая помощь будет признательна!

    var curdate = moment().subtract(7, 'day').toDate();

    $("#start,#end").datepicker({ language: 'el', autoclose: true});
    $( '#end' ).datepicker( 'setDate', new Date() );
    $( '#start'  ).datepicker( 'setDate', curdate );

    $('#start, #end').datepicker({ language: 'el', autoclose: true}).change(function () {

    //var thisval = this.value; //this.val--> undefined
     var start= $( '#apo' ).datepicker( 'getUTCDate' );// returns datetime object
     var end= $( '#ews' ).datepicker( 'getUTCDate' );// returns datetime object

     var input1={ startdate: $( '#start' ).datepicker( 'getUTCDate' ), 
                     enddate: $( '#end' ).datepicker( 'getUTCDate' ) };

       //table.ajax.url("queries.php?q=employees_full"); //do i need this?
       //table.ajax.reload(); //or table.draw();
       });      

  var table = $('#example4').DataTable({
                "ajax" : { url: "queries.php?q=employees_full" ,
                           dataType: "json",
                           dataSrc: '' ,
                           data: input1 },
                                       ......});

В запросах PHP Sql query.php? Q = employee_full iподготовьте заявление с

   ... WHERE alldates.alldate >= (CONVERT(date, ?))  and alldates.alldate <= (CONVERT(date, ?))

и

   $stmt = sqlsrv_prepare( $conn, $sql , array(&$_POST["startdate"],&$_POST["enddate"]));

Что мне не хватает?

...