/*
--名称: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