日期:2014-05-16  浏览次数:20747 次

一个分页存储过程的问题
搞了好久都没有搞好,那位大哥帮个忙帮我看一下:
DELIMITER   $$

DROP   PROCEDURE   IF   EXISTS   `huangxin`.`pagination_mysql`   $$
CREATE   PROCEDURE   `huangxin`.`pagination_mysql`   (
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);
        else
            set   sSql   =   concat( 'select   ',columns, '   from   ',tablename,sOrder);
        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   ',