【问题标题】:Datatables not sorting date correctly Serverside数据表未正确排序日期服务器端
【发布时间】: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


【解决方案1】:

感谢大家的贡献。

归根结底,问题实际上是由数据库中的某个字段格式错误引起的。 datecreated 字段保存为 Varchar,它必须是 DATETIME。

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

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

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多