Mysql 数据表未在服务器端正确排序日期

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

我使用服务器端处理,所以据我所知,所有排序/排序都是在服务器端完成的。但是,当我单击列标题时,它应该向服务器发送一个post变量以应用ASC或DESC排序顺序。这是行不通的,我正试图找出我的问题所在

我使用的是datatables附带的默认脚本

数据库中我的日期存储为时间戳值,如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');
            );
$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
完全按照它的建议执行:将排序交给服务器端脚本。