to:xizi2002(戏子=>影帝) 
当然可以把它放在SESSION里面,但这样太麻烦我的意思是:在不需要重新查找的情况下实现上下翻页功能,就如google那样的效果

解决方案 »

  1.   

    在翻页的link加上搜索的变量不就ok了,譬如index.php?page=<?=$pagg?>&search_name=<?=search_name?>
      

  2.   

    他说的不是session是array不过无论如何一刷新还是会进行查询的。
      

  3.   

    to: maxid() 
      用ARRAY不好,如果数据量很大的话,就会碰到很多的麻烦  我想piner(piner) 说的方法或许可取
      

  4.   

    呵呵原来你是说要这种效果,明白,可你说的问题说的可不是这样,他的方法一样要查询的(你的查询的意思是查找吧,我们都误会了,哈哈)只要把当时的状态记录下来就可以的,就是用piner(piner)说的方法记录下来(叫状态)
      

  5.   

    我的意思是这样的:在一个名为NEWS的数据表中有很多数据,我现在要按用户输入的关键字进行查找,并把与关键字相匹配的主题分页显示出来,但我只能看到第一页,当点下一页时没有显示(注:查找出来的结果有三页),为什么我点下一页时却没有结果呢?我想是我搜索的关键值丢了,但是怎么才能实现分页显示呢?
      

  6.   

    TO:xuzuning(唠叨) 
        传递或缓存搜索的关键字是如何实现的呢?请详细说明一下,谢谢
      

  7.   

    类似
    test.php
    <form action="test.php" method="post">
    <input type="text" name="searchkey" value="<? echo $_GET['searchkey'];?>">
    <input type="submit" name="search" value="查找">
    </form>
      

  8.   

    写错了,是
    test.php
    <form action="test.php" method="post">
    <input type="text" name="searchkey" value="<? echo $_POST['searchkey'];?>">
    <input type="submit" name="search" value="查找">
    </form>
      

  9.   

    MySQL 查询中的分页思路的优化
    作者:steeven似乎讨论分页的人很少,难道大家都沉迷于limit m,n?
    在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时,
    where somthing order by somefield+somefield
    mysql会搜遍数据库,找出“所有”符合条件的记录,然后取出m,n条记录。
    如果你的数据量有几十万条,用户又搜索一些很通俗的词,
    然后要依次读最后几页重温旧梦mysql该很悲壮的不停操作硬盘。所以,可以试着让mysql也存储分页,当然要程序配合。
    (这里只是提出一个设想,欢迎大家一起讨论)ASP的分页:在ASP系统中有Recordset对象来实现分页,但是大量数据放在内存中,而且不知道什么时候才失效(请ASP高手
    指点). 
    SQL数据库分页:用存储过程+游标方式分页,具体实现原理不是很清楚,设想如果用一次查询就得到需要的结果,或者是
    id集,需要后续页时只要按照结果中的IDs读出相关记录。这样只要很小的空间保留本次查询的所有IDs. (SQL中的查询结
    果不知道怎样清楚过期垃圾?)这样,可以让mysql模拟存储分页机制:
    1. select id from $table where $condition order by $field limit $max_pages*$count;
    查询符合条件的IDs.
    限定最大符合条件的记录数量,也可以不加。
    2. 因为php在执行结束后所有变量都要lost,所以可以考虑:
    方案a. 在mysql建立临时表,查询结果用一个时间或随机数作为唯一标志插入。
    其中建立page1~pagen个字段,每个字段保存该页中需要的ids, 这样一个id对一条记录.
    方案b. 如果打开session,也可以放在session中保存,实际上是放在文件中保存。
    建立一个$IDs数组,$IDs[1]~$IDs[$max_pages]. 考虑到有时候用户会开几个
    窗口同时查询,要为$ids做一个唯一标志,避免查询结果相互覆盖。二维数组
    和$$var都是好办法。
    3. 在每页页的请求中,直接找到对应的IDs,中间以","间隔:
    select * from $table where id in ($ids); 速度绝对快
    4. 收尾要考虑查询结果的自动清除,可以设置定时或者按比例随机清楚。如果用mysql临时表要加上一个时间标志字段,
    session中要加入$IDs["time"]=time(); 在一定时间以后不操作视为过期数据。5. 如果要优化,可以考虑用把1和2.a中的语句合并成select ...... into ....Note:
    1.以上只是针对mysql的修补方案,希望mysql哪天能把这些功能加进去
    2.其它数据库也可以套用。
    3.如果其它数据库还有更先进的分页方式,请告诉我或mailto: [email protected]
    4.如果真的有很多数据要查询,还是和mysql再见吧,sql,oracle都提供了更先进的关键词索引查询。精益求精,以上只是抛砖引玉,欢迎共同探讨分页问题。(也可关于其它数据库)
    希望有一天能把各种分页方式整理出来供新手参考。http://www.phpe.net/articles/356.shtml
      

  10.   

    TO:maxid() 
      还是不行啊,点下页时没有显示出来
      

  11.   

    用session不知道可不可以。一次搜索出所有符合条件的纪录,将其放入一个数组中以后翻页就是对session里数组中的值进行处理了没有试验过,理论上似乎可以
      

  12.   

    感谢soniclee(疯宝宝):用session应该可以,但是如果有一个很庞大的数据呢?这样就不怎么好使了
      请问还有更好的方法吗?
      

  13.   

    还是用SESSION变量,不过是把WHERE子句的内容保存,分页的时候在查。最好是判断用户是翻业操作还是查询操作。
    我在ASP做过把记录集用SESSION保存(是一个旧房查询,生成的WHERE子句很长。而且记录可能很多。),然后用户随便翻页。这用有一些好处,但是有一个恶心的坏处。用户第一次查询后有了一个记录集,并保存在SESSION。但是在翻页之前管理员删除了一些记录,而这时翻页并没有重新执行查询,就会……
    我想理想一点的办法是数据更新后用一个事件提请前段页面重新执行查询。这种效果在WEB编程里不知道怎么实现。那位高人可以讲解一下啊!