讨论现场报道《论坛置顶、普通贴分页优化算法》

讨论现场报道《论坛置顶、普通贴分页优化算法》

19:31 2007-05-15

小黑发言:

先来说一个一下引用的魔力!

先举个简单的例子……略!

主要是改变一个值,同时另一被改变引用的值也会改变。

在一个函数当中,如果参数不用引用,那么所传进去的参数的值不会被改变。那么在函数内部对参数变量所有作

的改变不会影响改变量在外部的值。

请杨煌给大家说一下引用为什么会这样。

注:这家伙可牛了,居然从内存地址给大家讲了引用是怎么回事!!精典!!!!……,大家纷纷摇头是道!

小黑又给大家举了两个例子,来说明怎么改变外部变量的值…………

现在切入主题……分页……

首先说了分页的基本原理:

以前的办法:$sql = "SELECT count(*) FROM xxx LIMIT 0,10"…….

基本上都是靠0,10两参数去改变的。

然后把这两参数做成通用的。

$act = ($page – 1 ) * $per;

$end = $per * $page;

$sql = "SELECT count(*) FROM xxx LIMIT {$act},{$end}"

当然对为什么用{}进行了说明,并用分析了基本分页程序的原理。

19:53 2007-05-15

来了一段精典的程序:

$sql = "select SQL_CALC_FOUND_ROWS * from xxx limit {$act},{$end}";

注意:SQL_CALC_FOUND_ROWS;只要满足后面的LIMIT条件,那么SQL_CALC_FOUND_ROWS

会把记录数给缓存起来。

小黑来了一段使用这种方法的成员函数:

程序如下:

public function getLimitNums(){

    $nums=$this->fetch_array($this->query("SELECT FOUND_ROWS()"));

    return $nums[0]['FOUND_ROWS()'];

}

这首先在查询数据库时就减少了一次,这就在效率方面得到了提高。

19:59 2007-05-15

进行论坛主题、置顶贴高效分页:

程序片断如下:

<?php

/**

     * 获取分页数据

     *

     * @param int $fid 当前版块ID

     * @param int $page 当前页数

     * @param int $istop 置顶总页数

     * @param int $noract 普通开始记录数

     * @param int $tpage 总记录

     */

function get($fid=null,$page=1,$istop=1,$noract=0,&$tpage=0){

    if($istop){

        //数据库操作 得出置顶记录总数 $ttop

        if($page==1){

            //得出普通记录总数 $tnorl

            //得出总页数

            $tpage = $ttop+$tnorl;

        }

        $re = $ttop – $page*$per;

        if($re>=0){

            //只查询置顶数据,并保持 istop 和 noract 不变

        }else{

            $topact=($page-1)*$per+1;

            $topend=$per*$page;

            //得出当前页置顶数目和数据 $topnum

            $noract=0;

            $norend=$per-$topnum;

            //并改变 istop=0 noract=norend+1

            //得出普通记录数据

        }

    }else{

        //$noract = noract

        //$norend = noract + $per

        //改变 istop = 0 , noract = $norend+1         

    }

}

/*    if ($act < 1) $act = 1;

if ($end > $tpage) $end = $tpage;

for($i=$act;$i<=$tpage;$i++){

//do any other things

}

*/

?>

<input type="hidden" name="istop" value="1">

<input type="hidden" name="noract" value="0">

<input type="hidden" name="tpage" value="0">

第一页首先得出置顶贴的总记录数:

到第四页时没有置顶贴,我们就不需要再进行多一次的数据库查询请求,

对总记录数用一隐藏域进行了保存。

………….

对分页功能进行了非常精辟的剖析。

………….

人生最大的乐趣,最大的协作,最大的团结莫过于此,莫过于大家能纷纷的氢

自己所收获的成果放在桌上,让大家一起共享,一起享受。

或者N年过后,会有人会问起,请您讲一下在您过去的团结合作中,给你带来的

最大乐趣是什么?

那么那个时候,那个时候我们就可以豪不忧豫的讲出现在的感受:”曾经的集体,

使我们都有一种家的感觉,在这样的大家庭里,大家能互相分享各自的成果,而且

是豪不保留放在共享桌上,让大家一起品尝……,“,这是大家自豪的,同样这种

精神也是我们最大的财富。

20:33 2007-05-15

主要发言基本就这样,下面大家纷纷讨论…..

正在准备结束的时候,杨煌也不甘示弱。。

首先杨煌对大家基本描述了正则表达式的情况。。

? * + {m,n} 贪婪匹配….匹配尽量多的字符,如?是匹配0或者1个,那么在这里,如果能匹配0个,那么它就不会去匹配0个,

与之对应是惰性匹配,尽量少的去匹配。。

单行模式:如果字符串中,没有回车换行,那么就属于单行模式。

多行模式:如果有回车换行,那么就属于多行模式。

…………………..

关于回溯现象:当字符串已经被匹配完了,但是我们的表达则还有没有匹配完,那么这个时候正则引擎就需要把目标字符的指针向前

移动一位(回溯一位).

…………………….

正则表达式匹配方式是从头先一个一个和目标字符串匹配,正则表达式移动一个,那么字符串的指针敢要随之移动一下,

只能从头往后匹配。

…………………..

……………………..

略………………

详细内容请见"phpoo之正则表达式篇<<天行键学习笔记>>;

此条目发表在 phpoo 分类目录,贴了 标签。将固定链接加入收藏夹。

讨论现场报道《论坛置顶、普通贴分页优化算法》》有 3 条评论

  1. 机器人 说:

    对小黑的奉献精神,我们大家一定说声感谢……

  2. 小黑 说:

    继续 想把大家学到的东西都抖出来~ 呵呵

  3. Pingback 引用通告: bahis siteleri

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>