mysql存储过程简单分页_三款 mysql 分页存储过程实例

如果你正在mysql教程 5以上版本,我要告诉你这里有三款 mysql 分页存储过程实例哦,存储过程是mysql 5.0以后才支持的,现在看看这款存储过程吧,看一款简单存储过程

*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

这是一款高手分享的他的存储过程

create   procedure   `mysqltestuser_select_pageable`(

_whereclause   varchar(2000),     --   查找条件

_orderby   varchar(2000),     --   排序条件

_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;

--   构建动态的sql,输出关键字key的id集合

--   查找条件

set   @sql   =   'select     userid   from   mysqltestuser ';

if   (_whereclause   is   not   null)     and   (_whereclause   <>   ' ')   then

set   @sql=   concat(@sql,   '   where   '   ,_whereclause);

end   if;

if   (_orderby   is   not   null)     and     (_orderby   <> ' ')   then

set   @sql=   concat(   @sql   ,   '   order   by   '   ,   _orderby);

end   if;

--   准备id记录插入到临时表

set   @sql=concat( 'insert   into   _temptable_keyid(userid) ',   @sql);

prepare   stmt   from   @sql;

execute   stmt   ;

deallocate   prepare   stmt;

--   key的id集合     [end]

--   下面是输出

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     ';

set   @sql=concat(@sql, "     limit     ",@startpoint, "   , ",_pagesize);

prepare   stmt   from   @sql;

execute   stmt   ;

deallocate   prepare   stmt;

end;

end   if;

drop   table   _temptable_keyid;

end;

下面是mysqltestuser表的ddl:

create   table   `mysqltestuser`   (

`userid`   int(11)   not   null   auto_increment,

`name`   varchar(50)   default   null,

`chinesename`   varchar(50)   default   null,

`registerdatetime`   datetime   default   null,

`jf`   decimal(20,2)   default   null,

`description`   longtext,

primary   key     (`userid`)

)   engine=innodb   default   charset=gb2312;

插入些数据:

insert   into   `mysqltestuser`   (`userid`,   `name`,   `chinesename`,   `registerdatetime`,   `jf`,   `description`)   values

(1, 'xuu1 ', 'www.111com.net', '2007-03-29   12:54:41 ',1.5, 'description1 '),

存储过程调用测试:

--   方法原型     `mysqltestuser_select_pageable`(条件,排列顺序,每页记录数,第几页,是否统计数据)

--   call   `mysqltestuser_select_pageable`(_whereclause   ,_orderby   ,_pagesize   ,_pageindex   ,   _docount)

--   统计数据

call   `mysqltestuser_select_pageable`(null,   null,   null,   null,   1)

--   输出数据,没条件限制,10条记录/页,第一页

call   `mysqltestuser_select_pageable`(null,   null,   10,   1,0)

--   输出数据,条件限制,排列,   10条记录/页,第一页

call   `mysqltestuser_select_pageable`( 'chinesename   like   ' '%飞3% ' ' ',   'userid   asc ',   10,   1,   0)

mysql存储过程二

mysql测试版本:5.0.41-community-nt

/*****************************************************

mysql分页存储过程

吴剑 2009-07-02

*****************************************************/

drop procedure if exists pr_pager;

create procedure pr_pager(

in     p_table_name        varchar(1024),        /*表名*/

in     p_fields            varchar(1024),        /*查询字段*/

in     p_page_size            int,                /*每页记录数*/

in     p_page_now            int,                /*当前页*/

in     p_order_string        varchar(128),        /*排序条件(包含order关键字,可为空)*/

in     p_where_string        varchar(1024),        /*where条件(包含where关键字,可为空)*/

out     p_out_rows            int                    /*输出记录总数*/

)

not deterministic

sql security definer

comment '分页存储过程'

begin

/*定义变量*/

declare m_begin_row int default 0;

declare m_limit_string char(64);

/*构造语句*/

set m_begin_row = (p_page_now - 1) * p_page_size;

set m_limit_string = concat(' limit ', m_begin_row, ', ', p_page_size);

set @count_string = concat('select count(*) into @rows_total from ', p_table_name, ' ', p_where_string);

set @main_string = concat('select ', p_fields, ' from ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string);

/*预处理*/

prepare count_stmt from @count_string;

execute count_stmt;

deallocate prepare count_stmt;

set p_out_rows = @rows_total;

prepare main_stmt from @main_string;

execute main_stmt;

deallocate prepare main_stmt;

end;

第2个例子

php教程

$server="localhost";

$ua="root";

$pwd="123456";

$conn=mysql_connect($server,$ua,$pwd,1,131072); //后面比平时多了1,131072表示本地化,这样才能返回记录集

mysql_select_db("guestbook");

mysql_query("set names 'gbk'");

//$re=mysql_query("select * from guestbook order by id desc");

$re=mysql_query("call prc_page_result(1, 'name,time', 'guestbook', 'id<>0', 'id', 1, 'id', 2);");

while($row=mysql_fetch_assoc($re)){

echo $row["name"]."

";

echo $row["time"]."

";

}

mysql_close();

?>

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  = '

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;

//调用

call prc_page_result(1, "字段列表", "表名", "条件", "排序字段", 1, "id", 25);

参数说明:


版权声明:本文为weixin_30225755原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。