【问题标题】:How to define datatables server-side ordering manually?如何手动定义数据表服务器端排序?
【发布时间】:2015-02-14 11:01:19
【问题描述】:

Datatables 插件正在使用列索引对数据进行排序。但我想用 MySQL 列名的名称手动定义这些索引。我有超过 60 列,用户可以在设置部分更改列顺序。

数据表发送例如:

order[0][column]:"6"
order[0][column]:"desc"

我还想发送我自己定义的列名..

【问题讨论】:

    标签: jquery datatable datatables jquery-datatables


    【解决方案1】:

    可以选择使用custom http variable。但是有一个更好的方法。 在服务器端脚本中编写一个包含 mysql 列名和数据表列索引的数组。

    <?php
    $columns = array(
    // datatable column index  => database column name
        0 =>'employee_name',
        1 => 'employee_salary',
        2=> 'employee_age'
    );
    ?>
    

    那你就可以用列名写sql了,就这样。

    $sql = "SELECT employee_name, employee_salary, employee_age ";
    $sql.=" FROM employee";
    $sql.=" ORDER BY ". $columns[$_REQUEST['order'][0]['column']]."   ".$_REQUEST['order'][0]['dir']."   LIMIT ".$_REQUEST['start']." ,".$_REQUEST['length']."   ";
    

    参考可以参考coderexample

    【讨论】:

    • 列的顺序可能会在线更改...它非常重要(((我必须做很多功能才能使其正常工作。现在我也使用数组...但它非常复杂。Thx
    【解决方案2】:

    在您的 ajax 中执行此操作,发送带有列名称的自定义 var:

        var table = jQuery('#table').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": {
            url: "/my-url/",     
            "data": function ( d ) {
                if (d.order.length>0){
                    var columna = d.columns[d.order[0].column].name
                    var tipo_orden = d.order[0].dir
                    if (tipo_orden == "desc"){
                        columna = "-"+columna
                    }
    
                    d.orden_columna = columna;
    
                }
    
            }       
        }, 
    });
    

    然后在你的 php 中获取命令:

    <?php
    $order_by = $_REQUEST['orden_columna'];
    ?>  
    

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2017-03-21
      • 2014-04-13
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多