MYSQL存储过程实现分页并显示

原创 2011年11月16日 21:51:00
 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 ', '张飞1 ', '2007-03-29   12:54:41 ',1.5, 'description1 '),
    (2, 'xuu2 ', '张飞2 ', '2007-03-29   12:54:41 ',2.5, 'description2 '),
    (3, 'xuu3 ', '张飞3 ', '2007-03-29   12:54:41 ',3.5, 'description3 '),
    (4, 'xuu4 ', '张飞4 ', '2007-03-29   12:54:41 ',4.5, 'description4 '),
    (5, 'xuu5 ', '张飞5 ', '2007-03-29   12:54:41 ',5.5, 'description5 '),
    (6, 'xuu6 ', '张飞6 ', '2007-03-29   12:54:41 ',6.5, 'description6 '),
    (7, 'xuu7 ', '张飞7 ', '2007-03-29   12:54:41 ',7.5, 'description7 '),
    (8, 'xuu8 ', '张飞8 ', '2007-03-29   12:54:41 ',8.5, 'description8 '),
    (9, 'xuu9 ', '张飞9 ', '2007-03-29   12:54:41 ',9.5, 'description9 '),
    (10, 'xuu10 ', '张飞10 ', '2007-03-29   12:54:41 ',10.5, 'description10 '),
    (11, 'xuu11 ', '张飞11 ', '2007-03-29   12:54:41 ',11.5, 'description11 '),
    (12, 'xuu12 ', '张飞12 ', '2007-03-29   12:54:41 ',12.5, 'description12 '),
    (13, 'xuu13 ', '张飞13 ', '2007-03-29   12:54:41 ',13.5, 'description13 '),
    (14, 'xuu14 ', '张飞14 ', '2007-03-29   12:54:41 ',14.5, 'description14 '),
    (15, 'xuu15 ', '张飞15 ', '2007-03-29   12:54:41 ',15.5, 'description15 '),
    (16, 'xuu16 ', '张飞16 ', '2007-03-29   12:54:41 ',16.5, 'description16 '),
    (17, 'xuu17 ', '张飞17 ', '2007-03-29   12:54:41 ',17.5, 'description17 '),
    (18, 'xuu18 ', '张飞18 ', '2007-03-29   12:54:41 ',18.5, 'description18 '),
    (19, 'xuu19 ', '张飞19 ', '2007-03-29   12:54:41 ',19.5, 'description19 '),
    (20, 'xuu20 ', '张飞20 ', '2007-03-29   12:54:41 ',20.5, 'description20 '),
    (21, 'xuu21 ', '张飞21 ', '2007-03-29   12:54:41 ',21.5, 'description21 '),
    (22, 'xuu22 ', '张飞22 ', '2007-03-29   12:54:41 ',22.5, 'description22 '),
    (23, 'xuu23 ', '张飞23 ', '2007-03-29   12:54:41 ',23.5, 'description23 '),
    (24, 'xuu24 ', '张飞24 ', '2007-03-29   12:54:41 ',24.5, 'description24 '),
    (25, 'xuu25 ', '张飞25 ', '2007-03-29   12:54:41 ',25.5, 'description25 '),
    (26, 'xuu26 ', '张飞26 ', '2007-03-29   12:54:41 ',26.5, 'description26 '),
    (27, 'xuu27 ', '张飞27 ', '2007-03-29   12:54:41 ',27.5, 'description27 '),
    (28, 'xuu28 ', '张飞28 ', '2007-03-29   12:54:41 ',28.5, 'description28 '),
    (29, 'xuu29 ', '张飞29 ', '2007-03-29   12:54:41 ',29.5, 'description29 '),
    (30, 'xuu30 ', '张飞30 ', '2007-03-29   12:54:41 ',30.5, 'description30 '),
    (31, 'xuu31 ', '张飞31 ', '2007-03-29   12:54:41 ',31.5, 'description31 '),
    (32, 'xuu32 ', '张飞32 ', '2007-03-29   12:54:41 ',32.5, 'description32 '),
    (33, 'xuu33 ', '张飞33 ', '2007-03-29   12:54:41 ',33.5, 'description33 '),
    (34, 'xuu34 ', '张飞34 ', '2007-03-29   12:54:41 ',34.5, 'description34 '),
    (35, 'xuu35 ', '张飞35 ', '2007-03-29   12:54:41 ',35.5, 'description35 '),
    (36, 'xuu36 ', '张飞36 ', '2007-03-29   12:54:41 ',36.5, 'description36 '),
    (37, 'xuu37 ', '张飞37 ', '2007-03-29   12:54:41 ',37.5, 'description37 '),
    (38, 'xuu38 ', '张飞38 ', '2007-03-29   12:54:41 ',38.5, 'description38 '),
    (39, 'xuu39 ', '张飞39 ', '2007-03-29   12:54:41 ',39.5, 'description39 '),
    (40, 'xuu40 ', '张飞40 ', '2007-03-29   12:54:41 ',40.5, 'description40 '),
    (41, 'xuu41 ', '张飞41 ', '2007-03-29   12:54:41 ',41.5, 'description41 '),
    (42, 'xuu42 ', '张飞42 ', '2007-03-29   12:54:41 ',42.5, 'description42 '),
    (43, 'xuu43 ', '张飞43 ', '2007-03-29   12:54:41 ',43.5, 'description43 '),
    (44, 'xuu44 ', '张飞44 ', '2007-03-29   12:54:41 ',44.5, 'description44 '),
    (45, 'xuu45 ', '张飞45 ', '2007-03-29   12:54:41 ',45.5, 'description45 '),
    (46, 'xuu46 ', '张飞46 ', '2007-03-29   12:54:41 ',46.5, 'description46 '),
    (47, 'xuu47 ', '张飞47 ', '2007-03-29   12:54:41 ',47.5, 'description47 '),
    (48, 'xuu48 ', '张飞48 ', '2007-03-29   12:54:41 ',48.5, 'description48 '),
    (49, 'xuu49 ', '张飞49 ', '2007-03-29   12:54:41 ',49.5, 'description49 '),
    (50, 'xuu50 ', '张飞50 ', '2007-03-29   12:54:41 ',50.5, 'description50 ');


存储过程调用测试:

--   方法原型     `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分页查询通用存储过程

前段时间没有给出SQLServer转到Mysql的通用存储过程,本着共享的精神,为大家奉献这段Mysql分页查询通用存储过程,假设所用数据库为guestbook: use guestbook;deli...
  • fcrpg2005
  • fcrpg2005
  • 2007年03月07日 00:33
  • 10576

【MySql-多表联合查询分页存储过程】

分享一个好用的MySql多表联合按条件查询查询分页排序存储过程: -- ---------------------------- -- Procedure structure for `pPage`...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年04月28日 16:26
  • 751

MyBatis,MySql存储过程分页查询

前言一般我们使用MyBatis时进行分页主要通过使用PageHelper这个插件。但某些时候,在某些公司可能会遇到跨库查询并分页显示的场景,这时就无法在使用PageHelper了。如果待查询的MySq...
  • Revivedsun
  • Revivedsun
  • 2017年04月23日 19:49
  • 1167

写MySQL存储过程实现动态执行SQL (转)

-存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数          create procedure p_procedurecode(in sumdate...
  • sxb0841901116
  • sxb0841901116
  • 2014年08月28日 19:59
  • 1358

MYSQL多表分页存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_AllSiteSearch`(IN pagesize int,IN pageindex int,IN s...
  • baby97
  • baby97
  • 2014年12月19日 14:47
  • 1240

MySql 分页存储过程

DELIMITER $$ #修改分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_M...
  • xxj_jing
  • xxj_jing
  • 2014年06月05日 12:55
  • 6201

MySQL分页存储过程及其调用

存储过程 DELIMITER $$ USE `sxdb`$$ DROP PROCEDURE IF EXISTS `Query_Pagination_ViewPage`$$ CREATE DEF...
  • WingBin
  • WingBin
  • 2015年06月04日 22:53
  • 470

前端ajax,后台java+springmvc实现异步表格局部刷新分页

package com.ht.vo;import java.util.ArrayList;import java.util.List;public class EndorseVoPage {// 当前...
  • ankora
  • ankora
  • 2017年10月12日 16:08
  • 473

Springmvc table搜索在本页显示加分页

Springmvc table搜索在本页显示加分页控制器
  • qq_28883885
  • qq_28883885
  • 2017年04月25日 21:26
  • 454

利用MySQL存储过程分割字符串

在MySQL数据库中,我们可以使用存储过程实现字符串的分割,下文就为您介绍该方法的完整实现过程,希望对您能有所启迪。 AD:2013云计算架构师峰会课程资料下载 M...
  • jintianhen1
  • jintianhen1
  • 2013年12月03日 22:57
  • 1089
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL存储过程实现分页并显示
举报原因:
原因补充:

(最多只允许输入30个字)