mysql 分頁存儲過程,分頁存儲過程 for mysql

標簽: 瀏覽(21818)  日期:2007-07-05
elimiter $$
CREATE DEFINER=`root`@`localhost` 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 = 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, `(private_key)`, ` 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
 
使用方法:
   call prc_page_result(1,"fields","tablename","sqlwhere","orderFields","asc or desc","primary_field",pageSize);



-------------------------------------------------
上一篇:Mysql 安裝步驟 下一篇:MySQL VIEW as performance troublemaker



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