你应该知道起始的id也就是说,由于id不连续
你应该记录下每个区间起始的id
以便在以后的查询中使用

解决方案 »

  1.   

    to:xuzuning(唠叨) 
    是不是再建立一个表?这样?
    level id lid
    1     2   1
    1     6   2
    1     10  3
    2     3   1
    2     8   2 
    2     20  3
    ....
    把每个level的id都遍历在新表中, 下次要查询的第一百万到一百零三十记录的时候找到lid=一百万和一百零三十所对应的id, 然后用select * from table where level=1 and id between?
      

  2.   

    不要记录那么多吧?
    level
    page id
    1     2
    2    32
    3    70
    ....select * from tbl_name, level where tbl_name.id>=level.id and level.page=$page limit 30
    这样就可以了
      

  3.   

    这样你要删除的时侯,维护这个level表会比较麻烦吧
    page id
    1     2
    2    32
    3    70
    我第一页删了一个,例如是30,那你用什么策略更新后面页的id值? 重做一次?
      

  4.   

    to:xuzuning(唠叨) 
    十分感谢。 我大概明白了些。
    还有一点小问题。 
    level表中应该还有一个字段level
    page id level
    1     2  1
    2    32  1
    3    70  1
    1     3  2
    2    40  2
    3    90  2
    这个level字段是为文章栏目。是不是这样修改?select * from tbl_name, level where tbl_name.id>=level.id and level.page=$page and level.level=$level limit 30
      

  5.   

    如果table记录添加或删除了,不就需要重新update  level了,这个工作量不是也很大吗?
      

  6.   

    alasika(堕落人间) :
    我想到一个办法 , 当时估计效率也一般
    如果你删除的id是30,那么在level表中找大于30的id对应的page。然后更新。小于30的不更新。
      

  7.   

    alasika(堕落人间) :
     还想到一个方法,再建立一个表, deleteid
    字段:id
    第一步:搜level表,找到page对应的id, 得出:$startid;
    第二步:搜deleteid表,count 小于$startid的数量:得出$startlimit
    第三步:
    select * from tbl_name, level where tbl_name.id>=level.id and level.page=$page and level.level=$level limit $startlimit,30