MYSQL5 分頁存儲過程

 CREATE PROCEDURE PageDiv(

IN tableName varchar(100),
IN filedsNames varchar(500),
IN pageSize int,
IN pageIndex int,
IN strWhere varchar(500),
IN sortName varchar(500)
)
 
BEGIN
/*
**************過程簡介**************
MYSQL5.0通用分頁存儲過程
作者:範景及 EMAIL:[email protected]
日期:2009-03-08,婦女節完成噠,嘿嘿^^V
說明:該過程實現了分頁功能。支持where條件及order排序,但不支持group分組及多表級聯查詢
由於MYSQL目前無法獲取動態SQL返回值(需臨時表支持,實現起來太複雜了,暈一個先@@)
所以將總記錄數及當前頁數首先進行查詢,然後再將總記錄數及頁數放到每一條記錄中
**************參數說明**************
表名
IN tableName varchar(100),
字段名,多個字段以,分隔
IN filedsNames varchar(100),
每頁顯示記錄數
IN pageSize int,
當前頁
IN pageIndex int,
where條件,多個條件以,分隔
IN strWhere varchar(500),
排序,多個排序以,分隔
IN sortName varchar(500),
 
**************調用方法**************
call PageDiv('t_user','vcName,vcPassword',3,1,'','')
*/
DECLARE filedlist varchar(500);/*字段列表*/
DECLARE counts int default 0;/*總記錄數*/
DECLARE intPages int default 0;/*總頁數*/
DECLARE strPages varchar(20);/*總頁數*/
 
/*獲取總記錄數*/
if strWhere=''||strWhere=null then
set @sqlStr=concat("select count(*) into @counts from ",tableName);
else
set @sqlStr=concat("select count(*) into @counts from ",tableName," where ",strWhere);
end if;
PREPARE STMT FROM @sqlStr;
EXECUTE STMT;
 
/*獲取總頁數*/
if strWhere=''||strWhere=null then
set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName);
else
set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName," where ",strWhere);
end if;
PREPARE STMT FROM @sqlStr;
EXECUTE STMT;
 
/*總頁數返回值小於1的,均按1取值;大於1但有小數位的,則通過截取字符串的方式加1*/
if(@intPages<1) then
set @intPages=1;
elseif(@intPages>1) then
set @strPages=cast(@intPages as char);
if(INSTR(@strPages,".")>=0) then
set @strPages=LEFT(@strPages,INSTR(@strPages,".")-1);
set @intPages=cast(@strPages as char)+1;
end if;
end if;
 
/*分頁操作*/
if filedsNames=''||filedsNames=null THEN
set filedlist='*';
else
set filedlist=filedsNames;
end if;
 
if strWhere=''||strWhere=null then
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
else
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
end if;
PREPARE stmt_strSQL FROM @strSQL;
EXECUTE stmt_strSQL;
DEALLOCATE PREPARE stmt_strSQL;
END
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章