DataTables 服務器處理模式(2)之 PHP

第一次封裝的 改動較大比較亂勋功, 抽時間又寫了一個领曼,條理稍微舒服一點,有需要改進的地方绪励,慢慢維護吧蓉坎,測試可用澳眷。

    /*
      * @attention 本方法不需要前端額外處理發(fā)送的數(shù)據(jù)結構,服務端已經(jīng)處理蛉艾。否則會找不到對應數(shù)據(jù)钳踊!
      * @attention 額外增加了時間的范圍搜索邏輯處理 需要時間搜索請前端自行傳值!可以留空勿侯!
      * @param $request              datatable的數(shù)據(jù)  startDate 代表開始時間  endDate 代表結束時間
      * @param $tableName            操作的數(shù)據(jù)表
      * @param $searchMust           數(shù)據(jù)過濾的必須條件          e.g.  where status = 1 可以為空 []
      * @param $searchColumns        根據(jù)哪些列進行模擬搜索拓瞪,一維數(shù)組,可以為空數(shù)組 []
      * @param $dataTime             根據(jù)哪個字段進行時間范圍搜索 必須是Y-m-d H:i:s
      */ 
    static public  function class_demo_dt( $request, $tableName, $searchMust, $searchColumns, $dataTime  ) {
        global $wpdb;

        // data table 需要四個參數(shù)  // draw  全部的記錄數(shù) 過濾后的記錄數(shù) 數(shù)據(jù)
        // 除了開始時間和結束時間需要前臺額外傳值 其他的值datatables自己會處理
        $draw           =   $request['draw'];                 //會直接轉換int類型返回給前臺
        $search         =   $request['search']['value'];      //獲取前臺傳過來的過濾條件
        $start          =   $request['start'];                //從多少開始
        $length         =   $request['length'];               //數(shù)據(jù)長度
        $orderColumns   =   $request['order']['0']['column']; //那一列排序助琐,從0開始
        $orderDir       =   $request['order']['0']['dir'];    //ase desc 升序或者降
        $startDate      =   $request['startDate'];                //開始時間
        $endDate        =   $request['endDate'];                //結束時間
        // $orderDate      =   $request['columns'][$orderColumns]['data'];    //獲取當前需要排序的字段
        $orderDate      =   'create_date';    //獲取當前需要排序的字段  測試接口的時候 在放出去
        // $orderDate      =   'update_date';    //獲取當前需要排序的字段
        // 如果有默認排序的字段的話 拼接sql 沒有則為''
        if( isset( $orderColumns ) ) {
            $orderSql = " order by {$orderDate} ".$orderDir;
        }else{
            $orderSql = '';
        }
        // 分頁數(shù)據(jù) 控制每頁的顯示條數(shù)
        $limitSql = '';
        $limitFlag = isset( $start ) && $length != -1 ;
        if ( $limitFlag ) {
            $limitSql = " LIMIT ".intval($start).", ".intval($length);
        }
        // 如果有必須查詢條件
        if ( count( $searchMust ) > 0 ) {
            foreach ($searchMust as $key => $value) {
                $result[] = $key . '  =  ' . "{$value}"; 
            }
            $condition        =     join( ' AND ',$result );
            $sumSql           =     "SELECT count(1) as sum FROM  {$tableName} WHERE 1  AND $condition";
            $recordsTotal     =     $wpdb->get_row( $sumSql, ARRAY_A )['sum'];
            $totalresultSql   =     "SELECT * FROM  {$tableName} WHERE 1 AND $condition";
        }else{
            $sumSql           =     "SELECT count(1) as sum FROM  {$tableName} WHERE 1";
            $recordsTotal     =     $wpdb->get_row( $sumSql, ARRAY_A )['sum'];
            $totalresultSql   =     "SELECT * FROM  {$tableName} WHERE 1 ";
        }
        //  如果時間范圍過濾存在
        if ( strlen( $startDate ) > 0 && strlen( $endDate ) > 0  ) {
            $timeSql = ' AND (' . " $dataTime BETWEEN '". "$startDate". "' AND '". "$endDate"."'" . ' ) ';
        }else{
            $timeSql = false;
        }
        // 如果有搜索條件
        if ( strlen( $search ) > 0 ) {
                  $whereCondition   =   ' AND ( ';
                foreach ( $searchColumns as $keys => $value ) {
                    // var_dump( $value )
                    if ( $keys == 0 ){   // 如果單個匹配的話
                        $whereCondition .= $value . ' LIKE BINARY  "%' . $search . '%" ';
                    }else {      //如果是多個匹配的話
                        $whereCondition .= ' OR ' . $value . ' LIKE BINARY  "%' . $search . '%" ';
                    }
            }
            $whereCondition .= ' ) ';
        }
        if (  $timeSql && $whereCondition ) {
            $recordsFiltered    =   $wpdb->get_row( $sumSql.$whereCondition.$timeSql.$orderSql, ARRAY_A )['sum'];
            $infos              =   $wpdb->get_results( $totalresultSql.$whereCondition.$timeSql.$orderSql.$limitSql,ARRAY_A );
        }elseif ( !empty( $timeSql ) ) {
            $recordsFiltered    =   $wpdb->get_row( $sumSql.$timeSql.$orderSql, ARRAY_A )['sum'];
            $infos              =   $wpdb->get_results( $totalresultSql.$timeSql.$orderSql.$limitSql,ARRAY_A );
        }else{
            $recordsFiltered    =   $wpdb->get_row( $sumSql.$orderSql, ARRAY_A )['sum'];
            $infos              =   $wpdb->get_results( $totalresultSql.$orderSql.$limitSql,ARRAY_A );
        }
        return  array(
              "draw" =>intval($draw),
              "recordsTotal" => intval($recordsTotal),
              "recordsFiltered" => intval($recordsFiltered),
              "data" => $infos
          );
    }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祭埂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兵钮,更是在濱河造成了極大的恐慌蛆橡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掘譬,死亡現(xiàn)場離奇詭異泰演,居然都是意外死亡,警方通過查閱死者的電腦和手機葱轩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門睦焕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酿箭,你說我怎么就攤上這事复亏。” “怎么了缭嫡?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵缔御,是天一觀的道長。 經(jīng)常有香客問我妇蛀,道長耕突,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任评架,我火速辦了婚禮眷茁,結果婚禮上,老公的妹妹穿的比我還像新娘纵诞。我一直安慰自己上祈,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著登刺,像睡著了一般籽腕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸俭,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天皇耗,我揣著相機與錄音,去河邊找鬼揍很。 笑死郎楼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窒悔。 我是一名探鬼主播呜袁,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼简珠!你這毒婦竟也來了傅寡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤北救,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芜抒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珍策,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年宅倒,在試婚紗的時候發(fā)現(xiàn)自己被綠了攘宙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拐迁,死狀恐怖蹭劈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情线召,我是刑警寧澤铺韧,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站缓淹,受9級特大地震影響哈打,放射性物質發(fā)生泄漏。R本人自食惡果不足惜讯壶,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一料仗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伏蚊,春花似錦立轧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帐萎。三九已至,卻和暖如春平窘,著一層夾襖步出監(jiān)牢的瞬間吓肋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工瑰艘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留是鬼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓紫新,卻偏偏與公主長得像均蜜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芒率,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容