分頁的Mysql存儲過程

DELIMITER $$

DROP PROCEDURE
IF EXISTS `UP_Page` $$
CREATE DEFINER
=`root`@`localhost` PROCEDURE `UP_Page`(
in currpage int
,
in columns varchar(
500),
in tablename varchar(
500),
in sCondition varchar(
500),
in order_field varchar(
100),
in asc_field int
,
in primary_field varchar(
100),
in pagesize int
)
BEGIN
declare sTemp varchar(1000);
declare sSql varchar(4000);
declare sOrder varchar(1000);

if asc_field = 1 then
set sOrder
= concat(' order by ', order_field, ' desc ');
set sTemp
= '<(select min';
else
set sOrder
= concat(' order by ', order_field, ' asc ');
set sTemp
= '>(select max';
end if;

if currpage = 1 then
if sCondition <> '' then
set sSql
= concat('select ', columns, ' from ', tablename, ' where ');
set sSql
= concat(sSql, sCondition, sOrder, ' limit ?');
else
set sSql
= concat('select ', columns, ' from ', tablename, sOrder, ' limit ?');
end if;
else
if sCondition <> '' then
set sSql
= concat('select ', columns, ' from ', tablename);
set sSql
= concat(sSql, ' where ', sCondition, ' and ', primary_field, sTemp);
set sSql
= concat(sSql, '(', primary_field, ')', ' from (select ');
set sSql
= concat(sSql, ' ', primary_field, ' from ', tablename, sOrder);
set sSql
= concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder);
set sSql
= concat(sSql, ' limit ?');
else
set sSql
= concat('select ', columns, ' from ', tablename);
set sSql
= concat(sSql, ' where ', primary_field, sTemp);
set sSql
= concat(sSql, '(', primary_field, ')', ' from (select ');
set sSql
= concat(sSql, ' ', primary_field, ' from ', tablename, sOrder);
set sSql
= concat(sSql, ' limit ', (currpage-1)*pagesize, ') as tabtemp)', sOrder);
set sSql
= concat(sSql, ' limit ?');
end if;
end if;
set @iPageSize
= pagesize;
set @sQuery
= sSql;
prepare stmt from @sQuery;
execute stmt using @iPageSize;
END $$

DELIMITER ;
posted @ 2011-06-30 11:05  Athrun  阅读(279)  评论(0编辑  收藏  举报