我想在内存里分页。。想从一个结果集里通过循环把某些行(比如第一页 1~30行) 放到另一个结果集里可以实现吗?

解决方案 »

  1.   

    结构不同的话 mysql本身无法直接合并
    你这2个结果集有什么联系不
      

  2.   

    select * from table1 into table2
      

  3.   

    错误的做法,php本身没有常驻内存的东西,你在内存里分页没意义,除了当前页需要显示的那些数据,剩下的都是一堆垃圾也被你装进内存了。
      

  4.   

    楼上正解  PHP作为虚拟机语言 一次运行完毕就会清空所有内存中的数据 只有预定义标量和全局变量可以保存,就算你用分页算法 取后面几页的时候还是会重复从数据库读取 MySQL虽然有内存建表机制 但是带宽还是被占用了
    而这种占用时没有必要的 所以传ID的分页做法比较现实 
    数据量大且常用 可以用 mancache内存hash表 从服务器先读完一整张表 放到内存里再去使用 作为扩展 给PHP调用
      

  5.   


    都是查的一个表里的数据- -
    就是比如说
    $query = @mysql_query("select * from tablename1")比方说$query里返回了100条数据 我想把前30条保存到另一个结果集里。。那您说 要做分页的话 只能查询两次,先从数据库查到一共有多少行记录再根据这个记录数来分页吗?但是如果where后面有比较多的条件 似乎这个方法将来阅读性比较差些
      

  6.   


    mancache内存hash表 不好意思 菜鸟级不是很明白- -可以的话 能说详细点吗
      

  7.   

    你是要将结果集放到物理内存里(RAM)?(就像是C那样,开辟地址?)还是就是想保存一下,能让服务器找到并应用?如果想放到物理内存里,就只能用memcache这个PHP扩展进行处理。如果就是想保存一下,有很多方法,存COOKIE或SESSION行不?
      

  8.   

    你所谓的两次查询,第一次是先查出数据库总数。第二次再去查出当前页该显示的是数据。没错,就是这样。你在查询总数的时候,where条件还是要加的,但是order by和一些不影响数量的语句不要加,因为没必要还非常消耗资源,你只是为了取个你期望取到的总数,order by不会影响取出的数量,所以不用加它。一次性都放在内存里,你考虑过你的数据量有多大吗?考虑过你的数据增量吗?那些当前页不显示的数据,全都被塞在内存里了。这是不是很没必要的消耗呢?所谓memcached是一个第三方软件,他可以让数据常住内存。他也提供了给php的接口,你可以把数据放在memcached里面。可以用来将数据常住内存的第三方软件还有很多,如APC,Xcache,zend plamform等等。不过即使是用这些软件,也不能把数据一次性查出来全扔到内存里。
      

  9.   

    其实我的想法很简单就是想照以前写.net那样  一次性把数据查出来 然后一直操作这一个结果集 (比如控制显示那几行)
      

  10.   

    - -可能是我的说法有问题比如说我之前做.net的时候 是拿到一个结果集后放到ViewState里 然后一直操作这一个结果集。。
      

  11.   

    拿个数组,一直存fetcharray就是了