PHPdatatable服务器端处理(1)

来源:互联网 发布:爱淘宝红包不中 编辑:程序博客网 时间:2024/04/30 20:53

发送参数(Sent parameters)

当使用服务器处理时,Datatables会发送如下数据给服务器

名称

类型

描述

draw

integerJS

请求次数计数器,每次发送给服务器后又原封返回,因为请求是异步的为了确保每次请求能对应到服务器返回的数据,假设你请求的是第一页的数据收到的却是第二页的,这样就乱套了 (这是我对draw的理解,如果有不同理解的可以告知)

start

integerJS

第一条数据的起始位置,比如0代表第一条数据

length

integerJS

告诉服务器每页显示的条数,这个数字会等于返回的记录数,可能会大于因为服务器可能没有那么多数据。这个也可能是-1,代表需要返回全部数据(尽管这个和服务器处理的理念有点违背)

search[value]

stringJS

全局的搜索条件,针对于每一列( searchable需要设置为 true )

search[regex]

booleanJS

如果为 true代表全局搜索的值是作为正则表达式处理,为 false则不是。 注意:通常在服务器模式下对于大数据不执行这样的正则表达式,但这都是自己决定的

order[i][column]

integerJS

i是一个数组索引,对应的是 columns,从0开始,次参数表示那一列需要排序

order[i][dir]

stringJS

上面确定了是那一列,这个确定对应的列是什么样的排序方式 desc 是降序 asc升序

columns[i][data]

stringJS

columns 绑定的数据源,由columns.dataDT定义

columns[i][name]

stringJS

columns.nameDT里定义的名称

columns[i][searchable]

booleanJS

标记列是否能被搜索 为 true代表可以,否则不可以,这个是由 columns.searchableDT控制

columns[i][orderable]

booleanJS

标记列是否能排序 为 true代表可以,否则不可以,这个是由 columns.orderableDT控制

columns[i][search][value]

stringJS

特定列的搜索条件

columns[i][search][regex]

booleanJS

特定列的搜索条件是否视为正则表达式

 

 

<?php

//获取Datatables发送的参数 必要

$draw = $_GET['draw'];//这个值作者会直接返回给前台

 

//排序

$order_column = $_GET['order']['0']['column'];//那一列排序,从0开始

$order_dir = $_GET['order']['0']['dir'];//ase desc 升序或者降序

 

//拼接排序sql

$orderSql = "";

if(isset($order_column)){

    $i = intval($order_column);

    switch($i){

        case 0;$orderSql = " order by first_name ".$order_dir;break;

        case 1;$orderSql = " order by last_name ".$order_dir;break;

        case 2;$orderSql = " order by position ".$order_dir;break;

        case 3;$orderSql = " order by office ".$order_dir;break;

        case 4;$orderSql = " order by start_date ".$order_dir;break;

        case 5;$orderSql = " order by salary ".$order_dir;break;

        default;$orderSql = '';

    }

}

//搜索

$search = $_GET['search']['value'];//获取前台传过来的过滤条件

 

//分页

$start = $_GET['start'];//从多少开始

$length = $_GET['length'];//数据长度

$limitSql = '';

$limitFlag = isset($_GET['start']) && $length != -1 ;

if ($limitFlag ) {

    $limitSql = " LIMIT".intval($start).", ".intval($length);

}

 

//定义查询数据总记录数sql

$sumSql = "SELECT count(id) as sum FROMDATATABLES_DEMO";

//条件过滤后记录数 必要

$recordsFiltered = 0;

//表的总记录数 必要

$recordsTotal = 0;

$recordsTotalResult = $db->query($sumSql);

while ($row =$recordsTotalResult->fetchArray(SQLITE3_ASSOC)) {

    $recordsTotal = $row['sum'];

}

//定义过滤条件查询过滤后的记录数sql

$sumSqlWhere =" wherefirst_name||last_name||position||office||start_date||salary LIKE'%".$search."%'";

if(strlen($search)>0){

    $recordsFilteredResult =$db->query($sumSql.$sumSqlWhere);

    while ($row =$recordsFilteredResult->fetchArray(SQLITE3_ASSOC)) {

        $recordsFiltered =  $row['sum'];

    }

}else{

    $recordsFiltered = $recordsTotal;

}

 

//query data

$totalResultSql = "SELECT first_name,last_name,position,office,start_date,salaryFROM DATATABLES_DEMO";

$infos = array();

if(strlen($search)>0){

    //如果有搜索条件,按条件过滤找出记录

    $dataResult =$db->query($totalResultSql.$sumSqlWhere.$orderSql.$limitSql);

    while ($row =$dataResult->fetchArray(SQLITE3_ASSOC)) {

        $obj = array($row['first_name'], $row['last_name'], $row['position'],$row['office'], $row['start_date'], $row['salary']);

        array_push($infos,$obj);

    }

}else{

    //直接查询所有记录

    $dataResult =$db->query($totalResultSql.$orderSql.$limitSql);

    while ($row =$dataResult->fetchArray(SQLITE3_ASSOC)) {

        $obj = array($row['first_name'], $row['last_name'],$row['position'],$row['office'], $row['start_date'], $row['salary']);

        array_push($infos,$obj);

    }

}

 

/*

 * Output 包含的是必要的

 */

echo json_encode(array(

    "draw" =>intval($draw),

    "recordsTotal" => intval($recordsTotal),

    "recordsFiltered" => intval($recordsFiltered),

    "data" => $infos

),JSON_UNESCAPED_UNICODE);

 

 

function fatal($msg)

{

    echo json_encode(array(

        "error" => $msg

    ));

    exit(0);

}

0 0
原创粉丝点击