如何手动定义数据表服务器端排序?

时间:2015-02-14 11:01:19

标签: jquery datatable datatables jquery-datatables

Datatables插件使用列索引来排序数据。但是我想用MySQL列名称手动定义这些索引。我有60多列,用户可以在设置部分更改列顺序。

数据表发送例如:

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

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

2 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:0)

在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'];
?>