+ -
当前位置:首页 → 问答吧 → PHP+Mysql全文索引分页

PHP+Mysql全文索引分页

时间:2011-04-20

来源:互联网

我想问问大家全文索引的时候,怎么分页读取数据的,谢谢
求一个全文索引分页读取数据的代码,谢谢

我用到了两种方法
方法1
复制内容到剪贴板
代码:
$PageSize = 20;
$page=1;
$result=mysql_query("SELECT count(id) FROM article where MATCH (title) AGAINST ('$search')");
$row=mysql_fetch_row($result);
mysql_free_result($result);
            $pagecount=ceil($row[0]/$PageSize);
            $offset=$PageSize*($page - 1);
                    $result=mysql_query("SELECT * FROM article where MATCH (title) AGAINST ('$search') limit $offset,$PageSize");
                    while($rs=mysql_fetch_object($result))
                    {
                    //echo $rs->id;
                }
方法1如果是用户第一次访问的时候,花的时间就比较长

方法2
复制内容到剪贴板
代码:
$result=mysql_query("SELECT id FROM article where MATCH (title) AGAINST ('$search') limit 100");
    $page=1;
    $i=0;
    $PageSize = 20;
    $pagecount=ceil(mysql_num_rows($result)/$PageSize);
    $offset=$PageSize*($page - 1);
    $break=$PageSize*$page-1;
    $offset_end=$PageSize*$page;
    $idspage='';
    while($rs=mysql_fetch_array($result))
                        {
                        if($i>=$offset && $i<$offset_end)
                        {
                            $idspage.=$rs["id"].",";
                        }
                        if($i==$break)
                        {
                            break;
                        }
                        $i++;
                    }
                    $idspage=trim($idspage,",");
    mysql_free_result($result);
                $result=mysql_query("SELECT * FROM article where id in(".$idspage.") ORDER BY FIND_IN_SET(id, '".$idspage."')");
                while($rs=mysql_fetch_object($result))
                {
                //echo $rs->id;
                }
方法2的就很稳定,第一次访问的用户所花的时间就很少

两种方法我都循环一万次执行,如果mysql比较空间的时候,方法1的时间短点,而2的时间一直都是很稳定
如果mysql比较忙的时候,那么方法1花的时间就有点长,不过2还是一样稳定

第一次访问1慢,2快
再次访问的时候就是1快了,2还是很稳定


谢谢

我想问问大家全文索引的时候,怎么分页读取数据的,谢谢



谢谢

[ 本帖最后由 mjoshua 于 2011-4-20 11:04 编辑 ]

作者: mjoshua   发布时间: 2011-04-20

全文索引的时候不管你采取什么办法,只要数据库一大开销肯定也很大,所以这时候需要缓存机制。
一般类似搜索引擎的话,会采用SQL读取数据,然后缓存到XML,这样当用户在搜索的时候直接对XML操作

作者: ylw1230   发布时间: 2011-04-20

较少用数据库内置的全文索引功能。。我一般采用sphinx这样的服务来支撑。

作者: 112183883   发布时间: 2011-04-20

引用:
原帖由 ylw1230 于 2011-4-20 11:13 发表
全文索引的时候不管你采取什么办法,只要数据库一大开销肯定也很大,所以这时候需要缓存机制。
一般类似搜索引擎的话,会采用SQL读取数据,然后缓存到XML,这样当用户在搜索的时候直接对XML操作
那不是每个搜索都要缓存到XML里面去?
有这类的文章吗?具体怎么做的?

谢谢

作者: mjoshua   发布时间: 2011-04-20

相关阅读 更多