数据表没有正确排序日期Serverside

时间:2015-11-05 09:23:27

标签: mysql sorting datatables-1.10

我正在使用服务器端处理,据我所知,所有排序/排序都在服务器端完成。但是,当我单击列标题时,它应该向服务器发送一个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

上提出了一个问题

1 个答案:

答案 0 :(得分:0)

感谢所有人的贡献。

在一天结束时,问题实际上是由数据库中格式错误的字段引起的。 datecreated字段保存为Varchar,它必须是DATETIME。

一旦我在数据库中修复了这一切,一切都完美排序。

感谢所有帮助过的人。但是,我想强调一下,当服务器端处理完成时,所有排序/排序都在服务器端完成。您可以在客户端操作格式和显示,但不能在使用服务器端时实际订购。