分享

Mysql分页查询通用存储过程

 WindySky 2007-08-10

前段时间没有给出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);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多