Mysql分页查询通用存储过程

標簽:mysql 存储过程   瀏覽(22140)  日期:2007-06-19

前段时间没有给出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);
    set sOrder = concat(` order by `, order_field);
    
if asc_field = 1 then
        
set sTemp  = `<(select min`;
    
else
        
set sTemp  = `>(select max`;
    
end if;
    
    
if currpage = 0 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, `( private_key )`` from (select `);
            
set sSql = concat(sSql, ` `, primary_field, ` as private_key from `, tablename,` where `,sCondition, sOrder);
            
set sSql = concat(sSql, ` limit `, (currpage-1)*pagesize,`,`,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, ` as private_key from `, tablename, sOrder);
            
set sSql = concat(sSql, ` limit `, (currpage-1)*pagesize,`,`,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);




-------------------------------------------------
上一篇:Refactoring Tools 下一篇:细谈软件需求分析过程

Strong Yuan   2007-07-05

36 set sSql = concat(sSql, `( private_key )`, ` from (select `);37 set sSql = concat(sSql, ` `, primary_field, ` as private_key from `, tablename,` where `,sCondition, sOrder);38 set sSql = concat(sSql, ` limit `,(curr

Strong Yuan   2007-06-19

可以修改 currpage 的程序,可以設置第一頁爲 0 或者爲 1



  
Are you Bot? How you know that?ofcz no.