多数据库查询及数据的分页
来源:互联网 发布:云端笔记 知乎 编辑:程序博客网 时间:2024/05/29 14:30
//需求 根据不同的时间 连接到不同的数据库
//使用第三方 http://medoo.lvtao.net/ 轻量级的PHP数据库框架, 提高开发效率
control
//function.php//计算需要连接的 数据库function isSmallTodays($ToStartMonth,$ToEndMonth){ $moreConn = []; $i = false; //开始标示 while( $ToStartMonth < $ToEndMonth ) { $NewMonth = !$i ? date('Ym', strtotime('+0 Month', $ToStartMonth)) : date('Ym', strtotime(' +1 Month', $ToStartMonth)); $ToStartMonth = strtotime( $NewMonth ); $i = true; $database = new \Medoo\Medoo([ // 必须配置项 'database_type' => 'mysql', 'database_name' => DB_SERVER_LOG."$NewMonth", 'server' => 'localhost', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', // 可选参数 'port' => 3306, // 可选,定义表的前缀 'prefix' => 'fa_', // 连接参数扩展, 更多参考 http://www.php.net/manual/en/pdo.setattribute.php 'option' => [ PDO::ATTR_CASE => PDO::CASE_NATURAL ] ]); array_push($moreConn,$database); } return $moreConn;}//单数据库function connectDB($start_time){ $conns = new \Medoo\Medoo([ // 必须配置项 'database_type' => 'mysql', 'database_name' => DB_SERVER_LOG.$start_time, 'server' => "localhost", 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', // 可选参数 'port' => 3306, // 可选,定义表的前缀 'prefix' => 'fa_', // 连接参数扩展, 更多参考 http://www.php.net/manual/en/pdo.setattribute.php 'option' => [ PDO::ATTR_CASE => PDO::CASE_NATURAL ] ]); return $conns;}function mergeData($result){ $datas = []; $len = count($result); if ($result) { if ($len > 0) { for ($i = 0; $i <= $len - 1; $i++) { foreach ($result[$i] as $value){ array_push($datas, $value); }; } } } return $datas;}//copy 分页/** * 数组分页函数 核心函数 array_slice * 用此函数之前要先将数据库里面的所有数据按一定的顺序查询出来存入数组中 * $count 每页多少条数据 * $page 当前第几页 * $array 查询出来的所有数组 * order 0 - 不变 1- 反序' */function page_array($count,$page,$array,$order){ $page=(empty($page))? '1':$page; #判断当前页面是否为空 如果为空就表示为第一页面 $start=($page-1)*$count; #计算每次分页的开始位置 if($order==1){ $array=array_reverse($array); } $totals=count($array); $countpage= intval(ceil($totals/$count)); #计算总页面数 $pagedata=array_slice($array,$start,$count); $pages = array('pagedata'=>$pagedata,'countpage'=>$countpage); return $pages; #返回查询数据}/** * 分页及显示函数 * $countpage 全局变量,照写 * $url 当前url */function show_array($countpage,$url){ $page=empty($_GET['page'])?1:$_GET['page']; if($page > 1){ $uppage=$page-1; }else{ $uppage=1; } if($page < $countpage){ $nextpage=$page+1; }else{ $nextpage=$countpage; } $str='<div style="border:1px; width:300px; height:30px; color:#9999CC">'; $str.="<span>共 {$countpage} 页 / 第 {$page} 页</span>";// $str.="<span><a href='{$url}?page={$uppage}'> 上一页 </a></span>"; $str.="<span><a href='{$url}page={$uppage}'> 上一页 </a></span>"; $str.="<span><a href='{$url}page={$nextpage}'>下一页 </a></span>"; $str.="<span><a href='{$url}page={$countpage}'>尾页 </a></span>"; $str.='</div>'; return $str;}control public function indexOp() { $condition = array(); if ($_GET['role_id']) { $condition['role_id'] = $_GET['role_id']; } if ($_GET['role_name']) { $condition['role_name'] = $_GET['role_name']; } if ($_GET['online_time']) { $condition['online_time'] = $_GET['online_time']; } $if_start_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/', $_GET['query_start_time']); $if_end_time = preg_match('/^20\d{2}-\d{2}-\d{2}$/', $_GET['query_end_time']); $start_unixtime = $if_start_time ? ($_GET['query_start_time']) : null; $end_unixtime = $if_end_time ? ($_GET['query_end_time']) : null; if ($start_unixtime || $end_unixtime) { $condition['login_time'] = array('time', array($start_unixtime, $end_unixtime)); } $searchtime = $condition['login_time'][1]; if ($searchtime) { $StartMonth = $searchtime[0]; //开始日期 $EndMonth = $searchtime[1]; //结束日期 $start_time = explode('-', $searchtime[0]); $end_time = explode('-', $searchtime[1]); //多数据库 连接 if (strtotime($EndMonth) > strtotime($StartMonth)) { $ToStartMonth = strtotime($StartMonth); //转换一下 $ToEndMonth = strtotime("$EndMonth -1 month"); //一样转换一下 $newEndTime = date("Y-m-d",$ToEndMonth); $newStartTime = date("Y-m-d",$ToStartMonth); //时间小于 一个月 if($newEndTime[1] == $newStartTime[1] && $newEndTime[2] <= $newStartTime[2]){ $conn = []; $conn1 = connectDB($start_time[0].$start_time[1]); array_push($conn,$conn1); $conn2 = connectDB($end_time[0].$end_time[1]); array_push($conn,$conn2); }else{ $conn = isSmallTodays($ToStartMonth, $ToEndMonth); } } //单一数据库connect and search if ($end_time[1] == $start_time[1] && $start_time[0] == $end_time[0]) { $ToStartMonth = date('Ym',strtotime($StartMonth)); $conns = connectDB($ToStartMonth); unset($condition['login_time']); if($condition['online_time'] > 0){ $condi = array("login_time[<>]" => [strtotime($StartMonth), strtotime($EndMonth)],"online_time[>=]" =>$condition['online_time']); }else { $condi = array("login_time[<>]" => [strtotime($StartMonth), strtotime($EndMonth)]); } unset($condition['online_time']); $condi = array_merge($condi,$condition); $datas = $conns->select('player_login_log',"*",$condi); } } //多数据查询 if($conn){ $result = $this->searchFilters($conn, $condition); } echo '</pre>'; //合并数据 if($result){ $datas = mergeData($result); } //导出表 if($_GET['export']){ $pagesize = 100000; $this->export($datas,$_GET['export']); } if($_GET['page']){ $page = $_GET['page']; } $pagesize = 20; Tpl::output('datas', $datas); Tpl::output('pagesize', $pagesize); Tpl::showpage('log/player_login_log.index'); } public function searchFilters($conn,$filters) { $start_time = strtotime($filters['login_time'][1][0]); $end_time = strtotime($filters['login_time'][1][1]); unset($filters['login_time']); if($filters['online_time'] > 0){ $condi = array("login_time[<>]" => [($start_time), ($end_time)],"online_time[>=]" =>$filters['online_time']); }else { $condi = array("login_time[<>]" => [($start_time), ($end_time)]); } unset($filters['online_time']); $condi = array_merge($condi,$filters); $conns = count($conn); $datas = []; for($i = 0;$i <= $conns-1;$i++){ $lists = $conn[$i]->select('player_login_log',"*",$condi); if($lists){ array_push($datas,$lists); } } echo '</pre>'; return $datas; }//html $pages = page_array($output['pagesize'],$_GET['page'],$datas,0); if($pages['countpage'] > 0){ $str = ''; foreach ($_REQUEST as $key =>$value){ $str .= $key."=".$value.'&'; } $str = '?'.$str; $newurl = substr($str,1,strrpos($str,'page')); $showpage = show_array($pages['countpage'],$str); echo $showpage;//跳转 <div style="text-align:right;"> <label class="submit-border"> 第 <input style="width: 50px" type="number" name="page" value="<?php $_GET['page'] ?>" /> 页 <input type="submit" name="page_up" class="submit" value="跳转" /> </label> </div>
内的 遍历时间及分页方法 来自别处
阅读全文