【发布时间】:2015-11-05 09:23:27
【问题描述】:
我正在使用服务器端处理,据我所知,所有排序/排序都是在服务器端完成的。但是,当我单击列标题时,它应该向服务器发送一个 post 变量以应用 ASC 或 DESC 排序顺序。这不起作用,我正在尝试找出问题所在。
我使用的是数据表自带的默认脚本。
我在数据库中的日期存储为时间戳值,例如 15-10-2015 10:20:30。
现在,表格显示正常,但日期排序不正确。即使我只输出年份值,例如2014 ,它不会对它们进行 ASC 和 DESC 排序。
相反,我得到如下结果:
2014 2014 2015 2015 2014 2014 2015
:(
我将表格声明如下:
DemoTable = $('#table_demo').DataTable(
{
"order": [],
"aaSorting" : [],
"deferRender": true,
"bJQueryUI": true,
"bPaginate": true,
"bStateSave": true,
"processing": true,
"serverSide": true,
"sPaginationType": "full_numbers",
"ajax":
{
"url": "view_demo_remote.php",
"data":
{
"role": $_SESSION['role'],
"email": $_SESSION['email'],
"practiseid": $_SESSION['practiceid']
}
},
"columns":[
{ "data": "first_number" , "bSortable": true },
{ "data": "datecreated", "bSortable": true },
{ "data": "submitted_by"},
{ "data": "second_number"},
{ "data": "picture","bSortable": false },
{ "data": "options","bSortable": false }
],
});
在服务器上,我对列有以下部分:
$columns = array(
array(
'db' => 'id',
'dt' => 'DT_RowId',
'formatter' => function( $d, $row )
{
// Technically a DOM id cannot start with an integer, so we prefix
// a string. This can also be useful if you have multiple tables
// to ensure that the id is unique with a different prefix
return $d;
}
),
array(
'db' => 'firstnumber',
'dt' => 'first_number',
'formatter' => function($d, $row)
{
$number = $d;
return substr($number, 0, 10);
}),
array(
'db' => 'datecreated',
'dt' => 'datecreated',
'formatter' => function($d, $row)
{
// DD/MM/YYYY HH:MM:SS
$date = date_create_from_format('d-m-Y H:i:s', $d);
return date_format($date, 'Y');
}),
array( 'db' => 'username', 'dt' => 'submitted_by' ),
array( 'db' => 'secondnumber', 'dt' => 'second_number' ),
array(
'db' => 'picture',
'dt' => 'picture',
'formatter' => function($d, $row)
{
return "<p style=\"padding:5px;\"><img src=\"".$d."\" alt=\"Picture\" style=\"width:auto;max-height:70px;border:1px solid #2d2d2d;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px; \"></img></p>";
}),
array( 'db' => 'id', 'dt' => 'options');
);
然后我在列部分之后有这部分:
// SQL server connection information
$sql_details = array(
'user' => DBUSER,
'pass' => DBUSERPASS,
'db' => DBNAME,
'host' => DBHOST
);
require( 'libraries/DataTables-1.10.7/examples/server_side/scripts/ssp.class.php' );
$whereAll = " firstnumber <>''";
echo json_encode(SSP::complex( $_GET, $sql_details, $table, $primaryKey, $columns, "",$whereAll));
所以表格显示正常,可以单击可排序列的所有列标题,并且可以完美地对 ASC 或 DESC 进行排序。但是,日期的排序并不完美。如果我关闭表格上的排序并手动将“ORDER BY datecreated ASC”添加到 where 子句,它可以完美运行,这告诉我我的日期格式没有问题,但是,我想要排序。
请帮忙
我还在数据表论坛https://www.datatables.net/forums/discussion/31216/datatables-not-ordering-date-correctly问了一个问题
【问题讨论】:
-
不,数据表在客户端对数据进行排序。在这种特殊情况下,作为文本。这就是你得到错误顺序的原因。
-
根据文档,它显示“启用服务器端处理后,DataTables 执行的所有分页、搜索、排序操作都将移交给服务器”datatables.net/examples/data_sources/server_side.html
-
@Shadow 但是是的,我明白你在说什么。我尝试使用渲染功能应用客户端格式,但这做了同样的事情。它改变了格式,但仍然没有正确排序。
-
@Shadow - 不,
"serverSide": true完全按照它的建议行事:将排序交给服务器端脚本。
标签: mysql sorting datatables-1.10