存储过程五(分页)

/*
--名称:MYSQL版查询分页存储过程 by peace 2013-8-14
--输入参数:@fields        -- 要查询的字段用逗号隔开
--输入参数:@tables        -- 要查询的表
--输入参数:@where        -- 查询条件
--输入参数:@orderby    -- 排序字段
--输出参数:@page        -- 当前页计数从1开始
--输出参数:@pagesize    -- 每页大小
--输出参数:@totalcount -- 总记录数
--输出参数:@pagecount  -- 总页数 
*/
DROP PROCEDURE IF EXISTS Query_Pagination; 
CREATE PROCEDURE Query_Pagination
(
    in _fields varchar(2000),   
    in _tables text, 
    in _where varchar(2000),  
    in _orderby varchar(200),
    in _pageindex int,
    in _pagesize int,
    in _sumfields  varchar(200),/*增加统计字段2013-5-8 peaceli*/
    out _totalcount int ,
    out _pagecount int 
)

begin

   set @startRow = _pageSize*(_pageIndex -1); //开始的行数
   set @pageSize = _pageSize;   //每页数量

    set   @rowindex = 0; //sql语句中的行数,红色的是mysql自己的函数, sql_calc_found_rows   是得到总数,相当于得到count了
     set @strsql = CONCAT('select   sql_calc_found_rows @rowindex:=@rowindex+1  as rownumber,',_fields,' from ',_tables,case ifnull(_where,'') when '' then '' else concat(' where ',_where) end,' order by ',_orderby,' limit ',@startRow,',',@pageSize);
     prepare strsql from @strsql;
     execute strsql;
   deallocate prepare strsql;

​下面的虽然行,但是java不能获得out和list一起的数据,所以需要的时候再说,我后来思考了一下,update、delete、insert使用比较好,因为有事务的处理;
查询的话,后台写起来其实也很多,为了处理的速度的话,可以多带一个参数,判断是查询count还是list。
//以上的在四里面就有解释,看不懂复制那个就行
   set _totalcount = found_rows();  //得到总数,out参数。fount_rows();就是得到刚才select语句的 sql_calc_found_rows   的数量

   if (_totalcount <= _pageSize) then //逻辑判断显示的总页数
                    set _pagecount = 1;
                    else if (_totalcount % _pageSize > 0) then
                    set _pagecount = _totalcount / _pageSize + 1;
                    else
                     set _pagecount = _totalcount / _pageSize;
            end if;
        end if;

 end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值