冰镇可乐 发表于 2016-10-21 01:56:23

Mysql按页查询记录的存储结构

CREATE PROCEDURE `page`(
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 sTempvarchar(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;
页: [1]
查看完整版本: Mysql按页查询记录的存储结构