• 分页技术


    分页算法

    Ps:表以users表说明,字段有userid,username,passwd。
    定义四个变量,各有各的用处
    int pageSize:每页显示多少条记录
    int pageNow:希望显示第几页
    int pageCount:一共有多少页
    int rowCount:一共有多少条
    说明:pageSize是指定的
            pageNow 是是用户选择的
            rowCount是从表中查询得到的,可以用select count(*) from users;得到所有记录的数目。
    pageCount是计算出来的
    该计算式为:

    if(rowCount%pageSize==0){
     pageCount=rowCount/pageSize;
    }else{
     pageCount=rowCount/pageSize+1;
    }

    当总的条数是每页显示条数的整数倍时,那么页数就是两者相除。
    当不是时,就是两者相除加一。

    例如:现在有9条记录,每页3条,则有三页。

       如果每页2条,则9%2得1,不为0,那根据计算,页数pageCount=9/2+1=5页,最后一页只有一条。

       每页4条呢,也是这么算的。

     那么如何得到每一页显示的东西呢,如何判断:

    --------------------------------------------------------------------------------------------------

    针对前面,很容易想到我们可以用如下sql语句得到某一页的内容
    select 字段名列表 from 表名 where id between ? and ?;
    显示第三页就是select * from users where userid between 7 and 9;
    可行,但是有一个问题就是如果删除了一个id,某一页可能会少一条记录。就像删除8号一样。

    --------------------------------------------------------------------------------------------------

    解决方案,如下语句(sql server)
    select top pageSize 字段名列表 from 表名 where id not in(select 
     top pageSize*(pageNow-1) id from 表名);(pagesize,pagenow均为之前声明的含义)


    以之前的users表为例,显示第三页,查询语句就是
    select top 3 * from users where userid not in(select top 6 userid from users)
    意思是要查找第三页的话,先排除前两页的内容,将前两页的id去除
    这样,按照顺序就可以将所有的内容显示,不用在意出现之前的问题了

    mysql的话就是(我本人用的是mysql)
    select * from users limit pagesize*(pagenow-1),pagesize;(pagesize,pagenow均为之前声明的含义)

    当然还有一个效率测试,当表的内容很多很多,几万条?十几万?几十万?

    可以使用如下语句:insert into users (username,passwd) select username,passwd from users;

    这样可以复制原表内容并添加,执行几次就可以让自己的表指数增加。当然,主键是不可以相同的,userid作为主键设为自增呗。

  • 相关阅读:
    getElementById返回的是什么?串讲HTML DOM
    DIV+CSS布局问题:一个宽度不确定的DIV里面放三个水平对齐的DIV,左右两个DIV宽度固定为150px,中间那个DIV充满剩余的宽度
    原生JavaScript拖动div兼容多种浏览器
    java一切乱码的解释 以及源头【转】
    java编码问题深入总结
    三菱Q系列PLC基本指令讲解
    三菱Q系列PLC的io分配
    linux函数的阻塞与非阻塞IO及错误处理
    linux系统编程之文件IO
    linux命令(shell)
  • 原文地址:https://www.cnblogs.com/adaonling/p/3541110.html
Copyright © 2020-2023  润新知