现在的位置: 首页 > 综合 > 正文

分頁的Mysql存儲過程

2012年09月07日 ⁄ 综合 ⁄ 共 1530字 ⁄ 字号 评论关闭
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 ;

抱歉!评论已关闭.