Mysql分页查询通用存储过程

Mysql分页查询通用存储过程

 

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)