Mysql分页查询通用存储过程

前段时间没有给出SQLServer转到Mysql的通用存储过程,本着共享的精神,为大家奉献这段Mysql分页查询通用存储过程,假设所用数据库为guestbook: 

use  guestbook;
delimiter $$
drop   procedure   if   exists  prc_page_result $$
create   procedure  prc_page_result (
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;

可以存储为数据库脚本,然后用命令导入:

mysql -u root -p < pageResult.sql;

调用:call prc_page_result(1, "*", "Tablename", "", "columnname", 1, "PKID", 25);

你可能感兴趣的:(Mysql分页查询通用存储过程)