您的位置:首页 > 数据库 > MySQL

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

2013-05-29 17:19 531 查看
/article/11740313.html

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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: