[共享]小弟我的高效mysql分页存储过程.

[共享]小弟我的高效mysql分页存储过程.

[共享]我的高效mysql分页存储过程…

总是习惯了mssql上面的存储过程分页,然后结合AspNetPager分页控件(http://www.webdiyer.com/AspNetPager/default.aspx),这样就完成了记录的分页显示;

由于最近用到mysql,由于mssql,mysql两者的表达语法和语法约束上的区别,导致写起mysql上的分页版本有点“复杂”。经过查找一番资料后终于把它“复制”了。

存储过程分页的基本原理:我们先对查找到的记录集(支持输入查找条件_WhereClause和排列条件_OrderBy)的key字段临时存放到临时表,然后构建真正的记录集输出。

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 &nb

[共享]小弟我的高效mysql分页存储过程.

相关文章:

你感兴趣的文章:

标签云: