2016-08-29 6 views
1

У меня есть Datagrid с включенным фильтром диапазона дат, в котором у меня есть два ввода даты, один для параметра fromDate и другой для параметра toDate, это позволяет мне отображать данные между обеими датами.Показать все данные, когда входы даты Диапазон значений

Я хочу показать все свои данные перед применением любых фильтров. DataGrid только позволяет мне отображать данные, когда я применяю фильтры, или когда я вставляю параметр toDate, иначе, когда оба параметра равны нулю, datagrid не будет отображать какие-либо данные.

Я прочитал еще один подобный вопрос этот, но не решить мою проблему: A single sql query which can handle both null or valued date range in sql server

Кроме того, я использовал другие типы фильтров, которые, кажется, нормально работать даже с нулевыми параметрами.

Сценарий:

<script type="text/javascript"> 

function doSearch(){ 
    $('#tt').datagrid('load',{ 
     fromDate: $('#fromDate').val(), 
     toDate: $('#toDate').val(),   
    }); 
} 
</script> 

HTML:

<table id="tt" class="easyui-datagrid" style="width:1000px;height:450px" 
url="datagrid24_getdata.php" sortName="id" sortOrder="asc" 
title="Search" iconCls="icon-search" toolbar="#tb" 
rownumbers="true" pagination="true"> 
<thead> 
<tr> 
     <th field="id" width="50" sortable="true">ID</th> 
     <th field="userName" width="250" sortable="true">Name</th> 
     <th field="date" width="100" sortable="true">Date</th> 
</tr> 
</thead> 
</table> 
<div id="tb" style="padding:3px"> 
<span> Insert filter Parameters:</span> 
<!-- DATE RANGE FILTER --> 
<input id="fromDate" type="date" style="line-height:26px;border:1px solid #ccc"> 
<input id="toDate" type="date" style="line-height:26px;border:1px solid #ccc"> 

<a href="#" class="easyui-linkbutton" plain="true" onclick="doSearch()">Search</a> 
</div> 

Мой PHP datagrid24_getdata.php:

<?php 
include 'conectionbd.php'; 

$page = isset($_POST['page']) ? intval($_POST['page']) : 1; 
$rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10; 
$sort = isset($_POST['sort']) ? strval($_POST['sort']) : 'id'; 
$order = isset($_POST['order']) ? strval($_POST['order']) : 'asc'; 
$offset = ($page-1)*$rows; 
$result = array(); 

//HERE WE FETCH THE VALUES FROM THE FILTER INPUTS 
$fromDate= isset($_POST['fromDate']) ? mysql_real_escape_string($_POST['fromDate']) : ''; 
$toDate= isset($_POST['toDate']) ? mysql_real_escape_string($_POST['toDate']) : ''; 

//THIS IS THE SQL QUERY I USE FOR THE DATE RANGE FILTER 
$where = "date BETWEEN '$fromDate%' AND '$toDate%'"; 


$rs = mysql_query("select count(*) from table where " . $where); 
$row = mysql_fetch_row($rs); 
$result["total"] = $row[0]; 

$rs = mysql_query("select * from table where " . $where . " order by $sort $order limit $offset,$rows"); 

$items = array(); 
while($row = mysql_fetch_object($rs)){ 
array_push($items, $row); 
} 
$result["rows"] = $items; 

echo json_encode($result);?> 

Я бы очень признателен за любую помощь!

ответ

0

Вы могли бы сделать что-то вроде этого (я не знаю PHP, что хорошо, так что синтаксис для проверки значений даты быть нулевым, вероятно, необходимо исправить):

//THIS IS THE SQL QUERY I USE FOR THE DATE RANGE FILTER 
$where = ''; 
// check if both the dates are not null 
if ($fromDate != null && $toDate != null) { 
    $where = "where date BETWEEN '$fromDate%' AND '$toDate%'"; 
} else if ($fromDate != null) { 
    $where = "where date >= '$fromDate%'"; 
} else if ($toDate != null) { 
    $where = "where date <= '$toDate%'"; 
} 


$rs = mysql_query("select count(*) from table " . $where); 
+0

Большое спасибо! Я не знал, как правильно применить условие IF. Это решило проблему. – Alex

0

Вы можете использовать следующий код для обработки условий Даты:

$where = ''; 
if (!empty($fromDate) && !empty($toDate)) { 
    $where = "date BETWEEN '$fromDate%' AND '$toDate%'"; 
} else if(!empty($fromDate)) { 
    $where = "date >= '$fromDate%'"; 
} else if(!empty($toDate)) { 
    $where = "date <= '$toDate%'"; 
}