无法使用数据表停止初始排序

时间:2015-06-10 10:48:09

标签: jquery mysql sorting datatables

我正在使用datatables 1.10.7。

我在这里提到的原始问题Question on datatables forum

我想禁用数据表自动执行的初始排序。

Datatables拒绝收听

"aaSorting": []

OR

"aaSorting": [[0,'desc'],[1,'desc']]

按ASC顺序排列表中的第一列。阻止这种情况的唯一方法是使用

"bSort": false

然而,这会删除我桌面上的所有排序功能。

除排序外,其他所有内容的表格都是100%。过滤,搜索,分页等工作100%。当我设置

"bSort" : true

或者,当我将其遗漏时,我认为默认值为true,我在警告消息中收到以下错误:

"错误":"发生SQL错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,使用在“ORDER BY”列附近1 ASC LIMIT 0,10'在第4行"

无论是否使用aSorting,我都尝试过使用和不使用bSort,并以各种方式将它们混合在一起。

任何帮助?

PS,这是我的表定义:

oTable = $('#table_demo').DataTable(
{
    "bSort": true,
    "aaSorting": [[0,'desc'],[1,'desc']],
    "bJQueryUI": true,
    "bPaginate": true,
    "bStateSave": true,
    "processing": true,
    "serverSide": true,
    "sPaginationType": "full_numbers",
    "ajax":
    {
        "url": "view_demo_remote.php",
        "data":
        {
            "field1": "".$_SESSION['field1']."",
            "field2": "".$_SESSION['field2']."",
            "field3": "".$_SESSION['field3'].""
        }
    },
    "columns":[
        { "bSortable": true, "data": "col1" },
        { "bSortable": true, "data": "col2" },
        { "bSortable": true, "data": "col3" },
        { "bSortable": false, "data": "col4" },
        { "bSortable": false, "data": "col5" },
        { "bSortable": false, "data": "col6" }
    ],
    "fnCreatedRow": function( nRow, aData, iDataIndex )
    {
        $(nRow).attr("attrname",aData["col1"]);
    },
    "fnDrawCallback": function( oSettings )
    {

    }
});

修改

我也尝试过使用最新的api,但没有成功:

"order": []

修改

这是我的view_demo_remote.php,用于服务器端处理:

<?php
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     * Easy set variables
     */

    /* Array of database columns which should be read and sent back to DataTables. Use a space where
     * you want to insert a non-database field (for example a counter or static image)
     */

    session_start();

        $table = 'table_demo';

        $primaryKey = 'id';

        $field1 = mysql_real_escape_string($_REQUEST["field1"]);
        $field2 = mysql_real_escape_string($_REQUEST["field2"]);
        $field3 = mysql_real_escape_string($_REQUEST["field3"]);


    $columns = array(
            array(
                'db' => 'id',
                'dt' => 'DT_RowId',
                'formatter' => function( $d, $row )
                {
                    return $d;
                }
            ),
            array( 'db' => 'name',   'dt' => 'col1' ),
            array( 'db' => 'surname',   'dt' => 'col2' ),
            array( 'db' => 'title',   'dt' => 'col3' ),
            array( 'db' => 'date',   'dt' => 'col4' ),
            array( 'db' => 'telephone',   'dt' => 'col5' ),
            array( 'db' => 'email',   'dt' => 'col6' )
            );


        $sql_details = array(
                'user' => DBUSER,
                'pass' => DBUSERPASS,
                'db'   => DBNAME,
                'host' => DBHOST
        );


        require( 'libraries/DataTables-1.10.7/examples/server_side/scripts/ssp.class.php' );


        echo json_encode(SSP::complex( $_GET, $sql_details, $table, $primaryKey, $columns, "","name <>'' ORDER BY id DESC, datecreated DESC"));

2 个答案:

答案 0 :(得分:4)

使用order指定不应该发生初始排序是完全正常的,请参阅下面的示例:

$('#example').dataTable( {
    "order": []
} );

在调用SSP::complex时,您的PHP代码出错。这些函数需要以下参数

static function complex ( $request, $conn, $table, $primaryKey, $columns, $whereResult=null, $whereAll=null )

但您要为"name <>'' ORDER BY id DESC, datecreated DESC"参数指定$whereAll

如果排序被禁用,这可能有效,但是当它不被排序并且另一列被排序时,SSP类将使用两个ORDER子句(一个来自$whereAll参数而另一个来自基于正在排序的列)导致SQL错误。

"name <>'' ORDER BY id DESC, datecreated DESC"替换为"name <>''"以更正此问题。

答案 1 :(得分:0)

您是否尝试过调用订单方法?

var table = $('#example').DataTable();

// Sort by column 1 and then re-draw
table
    .order( [] )
    .draw();