如何手动定义数据表服务器端排序?
How to define datatables server-side ordering manually?
Datatables 插件正在使用列索引对数据进行排序。但是我想用 MySQL 列名的名称手动定义这些索引。我有 60 多个列,用户可以在设置部分更改列顺序。
数据表发送例如:
order[0][column]:"6"
order[0][column]:"desc"
我也想发送自己定义的列名..
使用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
在您的 ajax 中执行此操作,发送带有列名称的自定义变量:
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'];
?>
Datatables 插件正在使用列索引对数据进行排序。但是我想用 MySQL 列名的名称手动定义这些索引。我有 60 多个列,用户可以在设置部分更改列顺序。
数据表发送例如:
order[0][column]:"6"
order[0][column]:"desc"
我也想发送自己定义的列名..
使用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
在您的 ajax 中执行此操作,发送带有列名称的自定义变量:
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'];
?>