У меня есть 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"]));
Что мне не хватает?