日期:2014-05-16  浏览次数:20684 次

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

测试表

?

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');

?