mysql 通用存储过程分页 海量数据分页

30 篇文章 0 订阅
9 篇文章 0 订阅

http://blog.csdn.net/jxncwzb/article/details/2883467

 

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL auto_increment,
  `sort` int(11)
  `title` varchar(50),
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1 ;

 

 

 

 

存储过程代码

 

DELIMITER $$;
DROP PROCEDURE IF EXISTS `sp_page`$$
CREATE PROCEDURE `sp_page`(
 in _pagecurrent int,/*当前页*/
 in _pagesize int,/*每页的记录数*/
 in _ifelse varchar(1000),/*显示字段*/
 in _where varchar(1000),/*条件*/
 in _order varchar(1000)/*排序*/
)
COMMENT '分页存储过程'
BEGIN
 if _pagesize<=1 then 
  set _pagesize=20;
 end if;
 if _pagecurrent < 1 then 
  set _pagecurrent = 1; 
 end if;
 
 set @strsql = concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize); 
 prepare stmtsql from @strsql; 
 execute stmtsql; 
 deallocate prepare stmtsql;

 set @strsqlcount=concat('select count(1) as count from ',_where);/*count(1) 这个字段最好是主键*/
 prepare stmtsqlcount from @strsqlcount; 
 execute stmtsqlcount; 
 deallocate prepare stmtsqlcount; 
END$$
DELIMITER ;$$

 

调用代码

调用例1  call sp_Page(1,3,'*','test','order by id desc');

调用例2  call sp_Page(1,3,'*','test where sort=1','order by id desc');

调用例3  call sp_Page(1,3,'id,title','test where sort=1','order by id desc');



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


我在mysql中运行发现出现问题,重新写了下,又没有问题,估计是字符集的问题


drop procedure if exists  _PageQuery;
DELIMITER  $$
create procedure _PageQuery(
in _pagecurrent int,/*当前页*/
in _pagesize int,/*每页的记录数*/
in _ifelse varchar(1000),/*显示字段*/
in _where varchar(1000),/*条件*/
in _order varchar(1000)/*排序*/
)
begin
   if _pagesize<=1 then
      set _pagesize=20;
   end if;
   
   if _pagecurrent<1 then
       set _pagecurrent=1;
   end if;
   
   set @strsql=concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);       
   
   prepare stmtsql from @strsql;
   
   execute stmtsql;
   
   deallocate prepare stmtsql;
   
   set @strsqlcount=concat('select count(1) as count from ',_where);
   
   prepare stmtsqlcount from @strsqlcount;
   
   execute stmtsqlcount;
   
   deallocate prepare stmtsqlcount;
   
end $$
delimiter;

call _PageQuery(2,10,'*','gt_user','order by  userid desc');
call _PageQuery(2,10,'username,petname,pic','gt_user','order by  userid desc');
call _PageQuery(1,10,'*','gt_user where age=50 ','order by  userid desc');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值