首页数据库 › 四款 mysql 分页存款和储蓄进程实例(60%)

四款 mysql 分页存款和储蓄进程实例(60%)

MySql通用分页存款和储蓄进程经过参数复制代码
代码如下:p_cloumns varchar,p_tables varchar,p_where varchar,p_order
varchar,p_pageindex int,p_pagesize int,out p_recordcount int,out
p_pagecount int$:begin declare v_sqlcounts varchar; declare
v_sqlselect varchar;#东挪西借查询总记录的SQL语句 set v_sqlcounts =
concat into @recordcount from ',p_tables,p_where); #select
v_sqlcounts;leave $; set @sqlcounts = v_sqlcounts; prepare stmt from
@sqlcounts; execute stmt; deallocate prepare stmt;
#赢得动态SQL语句重临值 set p_recordcount = @recordcount;
#基于总记录跳数总计出总页数 set p_pagecount =
ceiling/p_pagesize); if p_pageindex <1 then set p_pageindex = 1;
elseif p_pageindex > p_pagecount and p_pagecount <> 0 then
set p_pageindex = p_pagecount; end if;
#东挪西借分页查询记录的动态SQL语句 set v_sqlselect = concat('select
',p_cloumns,' from ',p_tables,p_where,if(p_order is not
null,p_order,''),' limit ',*p_pagesize,' , ',p_pagesize); #select
v_sqlselect;leave $; set @sqlselect = v_sqlselect; prepare stmtselect
from @sqlselect; execute stmtselect; deallocate prepare stmtselect; end
$复制代码
代码如下:#东挪西借查询总记录的SQL语句 set v_sqlcounts = concat into
@recordcount from ',v_tables,v_where); set @sqlcounts := v_sqlcounts;
#预处理动态SQL prepare stmt from @sqlcounts;
#传递动态SQL内部参考信息数 set @s1= categoryid; execute stmt using @s1;
deallocate prepare stmt; #获得动态SQL语句重回值 set recordcount =
@recordcount; #东挪西撮查询总记录的SQL语句 set v_sqlcounts = concat
into @recordcount from ',v_tables,v_where); set @sqlcounts :=
v_sqlcounts; #预管理动态SQL prepare stmt from @sqlcounts;
#传送动态SQL内部参考消息数 set @s1= categoryid; execute stmt using @s1;
deallocate prepare stmt; #收获动态SQL语句重临值 set recordcount =
@recordcount;
以上小编上再做存储进度分页里用到动态SQL里将查询到的count记录条数通过变量@recordcount放到recordcount里面了。mysql的IF
ELSE和其它数据库的判别有一点分化等,轻巧的决断语句如下。复制代码 代码如下:#基于总记录跳数计算出总页数
set pagecount = ceiling/pagesize); if pageindex <1 then set pageindex
= 1; elseif pageindex > pagecount then set pageindex = pagecount;
else select pageindex,pagecount; end if; #听新闻说总记录跳数总括出总页数
set pagecount = ceiling/pagesize); if pageindex <1 then set pageindex
= 1; elseif pageindex > pagecount then set pageindex = pagecount;
else select pageindex,pagecount; end if;

  set   @sql=concat(@sql, "     limit     ",@startpoint, "   ,
",_pagesize);
                  prepare   stmt   from   @sql;
  execute   stmt   ;
  deallocate   prepare   stmt;
          end;
end   if;

--   key的id集合     [end]

create   procedure   `mysqltestuser_select_pageable`(
        _whereclause   varchar(二零零一),     --   查找条件
        _orderby   varchar(二零零二),     --   排序条件
        _pagesize     int   ,       --   每页记录数
        _pageindex   int   ,     --   当前页码
        _docount       bit       --   标识:总括数据/输出数据
)
        not   deterministic
        sql   security   definer
        comment   ' '
begin
  --   定义key字段不经常表
  drop   table   if   exists   _temptable_keyid;     --  
删除不时表,要是存在
  create   temporary     table     _temptable_keyid
  (
userid   int
  )type=heap;

--   上边是出口

下面是mysqltestuser表的ddl:

insert   into   `mysqltestuser`   (`userid`,   `name`,  
`chinesename`,   `registerdatetime`,   `jf`,  
`description`)   values  
    (1, 'xuu1 ', 'www.bKjia.c0m', '2007-03-29   12:54:41 ',1.5,
'description1 '),
  

存储进程分页的基本原理:大家先对查找到的记录集(帮助输入查找条件_whereclause和排列条件_orderby)的key字段不时寄存到有时表,然后营造真正的记录集输出。

下面是mysqltestuser表的ddl:

--   总括数据
call   `mysqltestuser_select_pageable`(null,   null,   null,  
null,   1)
--   输出数据,没标准限定,10条记录/页,第生龙活虎页
call   `mysqltestuser_select_pageable`(null,   null,   10,   1,0)
--   输出数据,条件约束,排列,   10条记录/页,第后生可畏页
call   `mysqltestuser_select_新萄京娱乐网址2492777,pageable`( 'chinesename   like   '
'%飞3% ' ' ',   'userid   asc ',   10,   1,   0)

那是生龙活虎款高手分享的他的存储进程

*/
?>

  --   盘算id记录插入到有时表 
 

mysql -u root -p < pageresult.sql;

倘诺您正在mysql 5以上版本,笔者要告知你这里有四款 mysql
分页存款和储蓄进程实例哦,存款和储蓄进程是mysql
5.0自此才支撑的,今后拜候那款存款和储蓄过程吧,看大器晚成款轻松存款和储蓄进度

    /*概念变量*/
    declare m_begin_row int default 0;
    declare m_limit_string char(64);

1 2 3

--   上边是出口
if   (_docount=1)   then     --   统计
          begin
                    select   count(*)   as   recordcount   from  
_temptable_keyid;
          end;
else                                   --   输出记录集
          begin
                  --   总括记录的起源地方
  set   @startpoint   =   ifnull((_pageindex-1)*_pagesize,0);
                  set   @sql= '                 select           a.*
      from       mysqltestuser   a
      inner   join   _temptable_keyid   b
      on     a.userid   =b.userid     ';

*mssql存款和储蓄进程

*/

create definer=`root`@`localhost` procedure
`getrecordasp教程age`(
       in tbname varchar(100),
          fldname varchar(100),
          pagesize int,
          pageindex int,
          ordertype int,
          strwhere varchar(2000)
)
begin
     declare beginrow int;
     declare sqlstr varchar(1000);
     declare limittemp varchar(1000);
     declare ordertemp varchar(1000);
     set beginrow = (pageindex-1)*pagesize;
     set sqlstr = concat('select * from ',tbname);
     set limittemp = concat(' limit ',beginrow,',',pagesize);
     set ordertemp = concat(' order by ',fldname);
     if ordertype = 0 then
         set ordertemp = concat(ordertemp,' asc ');
     else
         set ordertemp = concat(ordertemp,' desc ');
     end if;

     set @sqlstring = concat(sqlstr,' ',strwhere,ordertemp,limittemp);

     prepare sqlstmt from @sqlstring;
     execute sqlstmt;
     deallocate prepare sqlstmt;

end

create definer=`root`@`localhost` procedure `getrecordcount`(
in tbname varchar(20),
in strwhere varchar(20)
)
begin
if strwhere!="" then
set @strsql=concat('select count(*) from ',tbname,' where
',strwhere);
else
set @strsql=concat('select count(*) from ',tbname);
end if;
prepare sqlstmt from @strsql;
execute sqlstmt;
deallocate prepare sqlstmt;
end

    /*预处理*/
    prepare count_stmt from @count_string;
    execute count_stmt;
    deallocate prepare count_stmt;
    set p_out_rows = @rows_total;

create   procedure   `mysqltestuser_select_pageable`(
        _whereclause   varchar(二〇〇四),     --   查找条件
        _orderby   varchar(贰零零壹),     --   排序条件
        _pagesize     int   ,       --   每页记录数
        _pageindex   int   ,     --   当前页码
        _docount       bit       --   标记:总括数据/输出数据
)
        not   deterministic
        sql   security   definer
        comment   ' '
begin
  --   定义key字段有的时候表
  drop   table   if   exists   _temptable_keyid;     --  
删除一时表,假若存在
  create   temporary     table     _temptable_keyid
  (
userid   int
  )type=heap;

 

转载本站文章请注明出处:新萄京娱乐网址2492777 http://www.cdhbjs.com/?p=4914

上一篇:

下一篇:

相关文章