当前位置: 代码迷 >> PHP >> 一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么处理
  详细解决方案

一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么处理

热度:35   发布时间:2016-04-28 17:42:02.0
一个PHP页面中有多条查询语句,导致页面打开速度特别慢,怎么办
下面的代码有点乱,我简单解释一下吧。首先从部门表中查询出部门记录,然后根据部门ID查询出用户表中部门对应的用户,然后根据用户ID查询出日志表中用户对应的日志,然后再根据日志ID查询出审核表中领导的审核记录……,大概就是这样一层调用一层,导致打开页面需要1分钟左右。

我估计是扫描数据表的次数过多造成的,但是不知道该怎么解决?

<?php
    //查询部门
    $sql_depart="SELECT * FROM depart WHERE gid>0 AND gid<15  ORDER BY gid";
    $query_depart=$db->query($sql_depart);
    while($d=$db->fetch_array($query_depart)){
?>
    <h3><?php echo $d['groupname'] ?></h3>
    <table style=" width: 100%">
    
    <tr><td><div>
     <?php
            //查询人员
           
            $sql_user="SELECT * FROM members WHERE flag<5 and groupid='".$d['gid']."' ORDER BY flag desc";
            $query_user=$db->query($sql_user);
            while($u=$db->fetch_array($query_user)){
        ?>        
    <table>
       
        <tr>
            <td><img src="images/person.gif">&nbsp;&nbsp;<strong><?php echo $u['username'] ?></strong></td>
        </tr>
        <tr><td>
            <?php
            //查询所有日志
            $sql="SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2.year='".$year."' AND c1.userid='".$u['uid']."' AND c2.end_date<'".date("Y-m-d")."'  ORDER BY c2.tid desc";
            $query=$db->query($sql);
            while($row=$db->fetch_array($query)){
                
            ?>
                <table>
                    <tr>
                        <td></td>
                        <td style="color:#AAAAAA;font-family: Georgia">
                            <?php echo $row['year']."年".$row['month']."月第".$row['week']."周(".date("Y/m/d",  strtotime($row['start_date']))." - ".date("Y/m/d",  strtotime($row['end_date'])).")" ?>
                        </td>
                    </tr>

------解决思路----------------------
引用:
Quote: 引用:

如果數據不需要實時顯示,可以使用緩存。

例如:
$data = getcache();  // 從緩存中讀取
if($data==''){
   // 讀取db獲取數據
  $data = '讀取db獲取';
  setcache($data); // 寫入緩存
}

echo $data;


这是写入到文件中吗?
有没有完整的实例供参考一下?


是寫在文件中的。

http://www.itstrike.cn/Question/PHP-technology-to-achieve-dynamic-cache-instance
------解决思路----------------------
顶楼上的..
不过可以理解
因为以前我也是这么干...
后面会玩多维数组后,一切都变的简单..

还有一种死办法,分N多页面来做,
好比,点击部门,进入用户页面,再依据用户页面
再点击用户进入用户操作记录页面...
------解决思路----------------------
关联:部门表关联用户表关联日志表关联审核表
排序:先按部门id排,再按用户id,再...(后面的关系没看透)
条件:就是你那些,整合一下
查询字段:只取用到的,比如部门id、部门名、用户id、用户名、...(没用到的字段坚决不取)
查询条数:这个你没有,建议写一个,大数据查询没有分页很可怕
这样只用一句语句就能得到数据了
然后就是遍历数据,由于排过序,所以不用怕会乱
第一个遍历部门,碰到部门id不同就另起一个table
每个部门再遍历用户,碰到用户不同就另起一个table
每个用户...
------解决思路----------------------
不知道下面这个SQL能不能让你的速度快些(不保证该SQL正确可行)

SELECT d.*,m.*,l.* FROM depart d 
left join members m on m.flag<5 and m.groupid = d.gid 
left join (SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2.year='".$year."'  AND c2.end_date<'".date("Y-m-d")."') l on  l.userid = m.uid 
WHERE d.gid>0 AND d.gid<15  ORDER BY d.gid,m.flag desc,l.tid desc
  相关解决方案