2014-02-13 5 views
0

Столбец, который я пытаюсь сортировать, выглядит следующим образом:JqGrid: Сортировка не соответствует правильному порядку

sort

Когда вы смотрите на изображении выше вы видите, что-то не следует в правильном порядке. 24 января должны прийти до 28 января

Вот мой код на стороне клиента:

$(function() { 
      $("#list").jqGrid({ 
       url:"grid_accessLog.php", 
       datatype: "json", 
       mtype: "GET", 
     colNames:["ID","Ip Address","User Info","Time","Page","Referrer","Search","User Agent","Notes"], 
       colModel: [ 
      { name: "id",index:"id", width: 55,search:true}, 
      { name: "ip_address",index:"ip_address",search:true, width: 90 }, 
      { name: "user_info",index:"user_info",search:true, width: 100}, 
      { name: "time",index:"time",search:true,sorttype:"date",width: 90}, 
      { name: "page",index:"page",search:true, width: 120}, 
      { name: "referrer",index:"referrer",search:true, width: 90 }, 
      { name: "search",index:"search",search:true, width: 90 }, 
      { name: "user_agent",index:"user_agent",search:true, width: 120 }, 
     { name: "notes",index:"notes",search:true, width: 120 } 
     ], 

     pager: "#pager", 
      rowNum: 30, 
      rowList: [10,20,30], 
      autowidth:true, 
      sortname: "id", 
      sortorder: "desc", 
      // loadonce: true, 
      viewrecords: true, 
      autoencode: true, 
      caption: "Access Log", 
      height: 'auto' 

          }).navGrid("#pager", {search:true, edit:false,add:false,del:false,searchtext:"Search",refreshtext:"Refresh"}); 
              });//end ready 

Вот мой код на стороне сервера;

//Get the requested page 
$page = $_GET['page']; 

//Get how many rows we want to have into the grid 
$limit = $_GET['rows']; 

// get index row - i.e. user click to sort. At first time sortname parameter - 
// after that the index from colModel 
$sidx = $_GET['sidx']; 

// sorting order - at first time sortorder 
$sord = $_GET['sord']; 

// if we not pass at first time index use the first column for the index or what you want 
if(!$sidx) $sidx =1; 

//array to translate the search type 
$ops = array(
    'eq'=>'=', //equal 
    'ne'=>'<>',//not equal 
    'lt'=>'<', //less than 
    'le'=>'<=',//less than or equal 
    'gt'=>'>', //greater than 
    'ge'=>'>=',//greater than or equal 
    'bw'=>'LIKE', //begins with 
    'bn'=>'NOT LIKE', //doesn't begin with 
    'in'=>'LIKE', //is in 
    'ni'=>'NOT LIKE', //is not in 
    'ew'=>'LIKE', //ends with 
    'en'=>'NOT LIKE', //doesn't end with 
    'cn'=>'LIKE', // contains 
    'nc'=>'NOT LIKE' //doesn't contain 
); 
function getWhereClause($col, $oper, $val){ 
    global $ops; 
    if($oper == 'bw' || $oper == 'bn') $val .= '%'; 
    if($oper == 'ew' || $oper == 'en') $val = '%'.$val; 
    if($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%'; 
    return " WHERE $col {$ops[$oper]} '$val' "; 
} 

$where = ""; //if there is no search request sent by jqgrid, $where should be empty 
$searchField = isset($_GET['searchField']) ? $_GET['searchField'] : false; 
$searchOper = isset($_GET['searchOper']) ? $_GET['searchOper']: false; 
$searchString = isset($_GET['searchString']) ? $_GET['searchString'] : false; 
if ($_GET['_search'] == 'true') { 
    $where = getWhereClause($searchField,$searchOper,$searchString); 
} 

mysql_query("SET NAMES 'utf8'"); 

// calculate the number of rows for the query. We need this for paging the result 
$result = mysql_query("SELECT COUNT(*) AS count FROM renal_accessLog"); 
$row = mysql_fetch_array($result,MYSQL_ASSOC); 
$count = $row['count']; 

// calculate the total pages for the query 
if($count > 0 && $limit > 0) { 
       $total_pages = ceil($count/$limit); 
} else { 
       $total_pages = 0; 
} 

// if for some reasons the requested page is greater than the total 
// set the requested page to total page 
if ($page > $total_pages) $page=$total_pages; 

// calculate the starting position of the rows 
$start = $limit*$page - $limit; 

// if for some reasons start position is negative set it to 0 
// typical case is that the user type 0 for the requested page 
if($start <0) $start = 0; 

// the actual query for the grid data 
$SQL = "SELECT * FROM renal_accessLog ".$where." ORDER BY $sidx $sord LIMIT $start , $limit"; 
$result = mysql_query($SQL) or die("Couldn't execute query.".mysql_error()); 


$responce = new stdClass(); 
$responce->page = $page; 
$responce->total = $total_pages; 
$responce->records = $count; 
$i=0; 
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) 
{ 
    $responce->rows[$i]['id']=$row['id']; 
    $responce->rows[$i]['cell']=array($row['id'],$row['ip_address'],$row['user_info'],$row['time'],$row['page'],$row['referrer'],$row['search'],$row['user_agent'],$row['notes']); 
    $i++; 
} 
echo json_encode($responce); 

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

+0

какой формат данных для столбца 'name:" time "' находится в ответе сервера из 'url:" grid_accessLog.php "? – Oleg

+0

@Oleg Man Я надеялся, что вы прокомментируете одно из моих сообщений о JqGrid. Ваши решения очень помогли мне. Ты жжешь. формат - дата («M j, Y | G: i: s A»); –

+0

@Oleg Я обновил вопрос с помощью кода на стороне сервера. –

ответ

0

Хорошо, так что я сделал, так как время не сортируется в правильном порядке, а время и идентификатор являются следствиями, я добавил эту часть проверки в свой запрос.

//checking if time is the sort column clicked so that we can default sidx to id.. 
if($sidx =='time'){ 
$SQL = "SELECT * FROM renal_accessLog ".$where." ORDER BY id $sord LIMIT $start, $limit"; 
}else{ 
$SQL = "SELECT * FROM renal_accessLog ".$where." ORDER BY $sidx $sord LIMIT $start , $limit"; 
} 
$result = mysql_query($SQL) or die("Couldn't execute query.".mysql_error()); 
Смежные вопросы