Mysql 数据表未在服务器端正确排序日期
我使用服务器端处理,所以据我所知,所有排序/排序都是在服务器端完成的。但是,当我单击列标题时,它应该向服务器发送一个post变量以应用ASC或DESC排序顺序。这是行不通的,我正试图找出我的问题所在 我使用的是datatables附带的默认脚本 数据库中我的日期存储为时间戳值,如15-10-2015 10:20:30 现在,表格显示良好,但日期排序不正确。即使我只输出年份值,例如2014年,它也不会对它们进行ASC和DESC排序 相反,我得到的结果如下: 2014年 2014 2015 2015 2014 2014 2015年 :( 我宣布该表如下:Mysql 数据表未在服务器端正确排序日期,mysql,sorting,datatables-1.10,Mysql,Sorting,Datatables 1.10,我使用服务器端处理,所以据我所知,所有排序/排序都是在服务器端完成的。但是,当我单击列标题时,它应该向服务器发送一个post变量以应用ASC或DESC排序顺序。这是行不通的,我正试图找出我的问题所在 我使用的是datatables附带的默认脚本 数据库中我的日期存储为时间戳值,如15-10-2015 10:20:30 现在,表格显示良好,但日期排序不正确。即使我只输出年份值,例如2014年,它也不会对它们进行ASC和DESC排序 相反,我得到的结果如下: 2014年 2014 2015 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');
);
$columns=array(
排列(
'db'=>'id',
‘dt’=>‘dt_RowId’,
“格式化程序”=>函数($d,$row)
{
//从技术上讲,DOM id不能以整数开头,因此我们使用前缀
//字符串。如果有多个表,这也很有用
//使用不同的前缀确保id是唯一的
返回$d;
}
),
排列(
'db'=>'firstnumber',
“dt'=>“第一个数字”,
“格式化程序”=>函数($d,$row)
{
$number=$d;
返回substr($number,0,10);
}),
排列(
“db'=>“datecreated”,
'dt'=>'datecreated',
“格式化程序”=>函数($d,$row)
{
//年月日HH:MM:SS
$date=从格式创建日期($d-m-Y H:i:s’,$d);
返回日期格式($date,'Y');
}),
数组('db'=>'username','dt'=>'submitted_by'),
数组('db'=>'secondnumber','dt'=>'second_number'),
排列(
“db”=>“图片”,
‘dt’=>‘图片’,
“格式化程序”=>函数($d,$row)
{
返回“”;
}),
数组('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));
//SQL server连接信息
$sql\u details=数组(
'user'=>DBUSER,
'pass'=>DBUSERPASS,
'db'=>DBNAME,
'host'=>DBHOST
);
require('libraries/DataTables-1.10.7/examples/server_-side/scripts/ssp.class.php');
$wherell=“firstnumber”“”;
echo json_encode(SSP::complex($_GET,$sql_details,$table,$primaryKey,$columns,“,$wherell));
因此,表显示良好,可以单击可排序列的所有列标题,并对ASC或DESC进行完美排序。但是,日期排序不完美。如果我关闭表上的排序,并手动添加“按日期创建ASC排序”对于where子句,它工作得很好,它告诉我我的日期格式没有问题,但是,我想继续排序
请帮忙
我还在datatables论坛上问了一个问题谢谢大家的贡献 一天结束时,问题实际上是由数据库中的一个字段格式错误引起的。datecreated字段被保存为Varchar,必须是DATETIME 一旦我在数据库中解决了这个问题,一切都会井然有序
感谢大家的帮助。但是,是的,我想强调一个事实,即当服务器端处理完成时,所有排序/排序都是在服务器端完成的。当使用服务器端时,您可以在客户端操作格式和显示,但不能操作实际顺序。感谢大家的贡献 一天结束时,问题实际上是由数据库中的一个字段格式错误引起的。datecreated字段被保存为Varchar,必须是DATETIME 一旦我在数据库中解决了这个问题,一切都会井然有序
感谢大家的帮助。但是,是的,我想强调一个事实,即当服务器端处理完成时,所有排序/排序都是在服务器端完成的。当使用服务器端时,您可以在客户端操作格式和显示,但不能操作实际的顺序。Nope,datatable在客户端排序数据。特别是案例,作为文本。这就是为什么您得到了错误的顺序。根据文档,它的内容是“在启用服务器端处理的情况下,DataTables执行的所有分页、搜索和排序操作都会传递给服务器”@Shadow但是的,我明白你的意思。我曾尝试使用render函数应用客户端格式,但效果相同。它更改了格式,但仍然没有正确排序。@Shadow-No,
“服务器端”:true
完全按照它的建议执行:将排序交给服务器端脚本。不,datatable在客户端对数据进行排序。在这种情况下,将其作为文本。这就是为什么您得到错误的顺序。根据文档,它是启用服务器端处理后,DataTables执行的所有分页、搜索和排序操作都将移交给服务器“@Shadow但是的,我明白你的意思。我曾尝试使用render函数应用客户端格式,但效果相同。它更改了格式,但仍然没有正确排序。@Shadow-No,“serverSide”:true
完全按照它的建议执行:将排序交给服务器端脚本。