CREATE PROCEDURE PageDiv(
IN tableName varchar(100),
IN filedsNames varchar(500),
IN pageSize int,
IN pageIndex int,
IN strWhere varchar(500),
IN sortName varchar(500)
)
BEGIN
/*
**************过程简介**************
MYSQL5.0通用分页存储过程
作者:范景及 EMAIL:123idgf@163.com
日期:2009-03-08,妇女节完成哒,嘿嘿^^V
说明:该过程实现了分页功能。支持where条件及order排序,但不支持group分组及多表级联查询
由于MYSQL目前无法获取动态SQL返回值(需临时表支持,实现起来太复杂了,晕一个先@@)
所以将总记录数及当前页数首先进行查询,然后再将总记录数及页数放到每一条记录中
**************参数说明**************
表名
IN tableName varchar(100),
字段名,多个字段以,分隔
IN filedsNames varchar(100),
每页显示记录数
IN pageSize int,
当前页
IN pageIndex int,
where条件,多个条件以,分隔
IN strWhere varchar(500),
排序,多个排序以,分隔
IN sortName varchar(500),
**************调用方法**************
call PageDiv('t_user','vcName,vcPassword',3,1,'','')
*/
DECLARE filedlist varchar(500);/*字段列表*/
DECLARE counts int default 0;/*总记录数*/
DECLARE intPages int default 0;/*总页数*/
DECLARE strPages varchar(20);/*总页数*/
/*获取总记录数*/
if strWhere=''||strWhere=null then
set @sqlStr=concat("select count(*) into @counts from ",tableName);
else
set @sqlStr=concat("select count(*) into @counts from ",tableName," where ",strWhere);
end if;
PREPARE STMT FROM @sqlStr;
EXECUTE STMT;
/*获取总页数*/
if strWhere=''||strWhere=null then
set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName);
else
set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName," where ",strWhere);
end if;
PREPARE STMT FROM @sqlStr;
EXECUTE STMT;
/*总页数返回值小于1的,均按1取值;大于1但有小数位的,则通过截取字符串的方式加1*/
if(@intPages<1) then
set @intPages=1;
elseif(@intPages>1) then
set @strPages=cast(@intPages as char);
if(INSTR(@strPages,".")>=0) then
set @strPages=LEFT(@strPages,INSTR(@strPages,".")-1);
set @intPages=cast(@strPages as char)+1;
end if;
end if;
/*分页操作*/
if filedsNames=''||filedsNames=null THEN
set filedlist='*';
else
set filedlist=filedsNames;
end if;
if strWhere=''||strWhere=null then
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
else
if sortName=''||sortName=null then
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
else
set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
end if;
end if;
PREPARE stmt_strSQL FROM @strSQL;
EXECUTE stmt_strSQL;
DEALLOCATE PREPARE stmt_strSQL;
END
分享到:
相关推荐
本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...
### MySQL分页存储过程概述 分页存储过程是一种在数据库层面上实现数据分页的技术。相比应用程序级别的分页,它能更高效地处理数据,减少网络传输的数据量,提升系统性能。在MySQL中,我们可以通过创建存储过程来...
通过上述分析可以看出,这个MySQL分页存储过程实现了灵活且高效的分页查询功能。它不仅能够根据用户提供的参数动态地构建查询语句,还能够处理排序、分组等复杂需求。对于需要频繁进行分页查询的应用场景来说,这种...
Mysql分页通用存储过程
通用Mysql分页存储过程,支持多表查询。
针对mysql分页的一个存储过程,可以动态传入表名,可带查询条件,可带排序列
本篇文章将深入探讨MySQL存储过程在实现通用分页中的应用。 首先,让我们理解什么是分页。分页是数据库查询结果的一种展示方式,它将大量的数据分成若干个小部分,每次只显示一部分,这样用户可以逐页浏览,避免一...
### MySQL存储过程实现分页 #### 背景与需求 在数据库操作中,分页是一种常见的需求,尤其是在处理大量数据时。通过分页技术,可以有效地减少每次查询的数据量,提高系统的响应速度和用户体验。MySQL作为一种广泛...
非常好用的mysql存储过程,支持大并发,很稳定,绝对原创,你值得拥有!
本文将深入探讨如何通过使用存储过程来实现高效的分页存储过程,特别是针对ASP.NET应用程序。 标题 "效率高的分页存储过程实现的分页" 提到的是一种优化数据检索的技术。在ASP.NET开发中,GridView控件是常用的数据...
本通用分页存储过程经过我的验证,可以使用,支持联表查询,支持单表查询,效率我没测过太多,应该还可以。有需要的拿去用。 如果测试出效率,我们可以交流交流
改造过的mysql版本的分页存储过程,严格测试,绝对好用.适合大型项目使用.
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒; 再生产环境中非常实用,帮助你解决线上数据库卡顿问题。
这里我们将深入探讨标题中提到的三种分页存储过程方法:拼接字符串、SQL Server 2005 的 `TOP (表达式)` 功能以及利用 `ROW_NUMBER()` 函数。 1. **拼接字符串**: 在早期的SQL版本中,由于缺乏内置的分页功能,...
以下是一个在MySQL中的分页存储过程示例: ```sql CREATE PROCEDURE GetPagedData(IN page INT, IN pageSize INT) BEGIN SELECT * FROM table LIMIT (page - 1) * pageSize, pageSize; END ``` 调用这个存储...
"sql分页存储过程"是指利用存储过程实现数据查询时的分页功能,这在大数据量的查询中尤为重要,因为直接一次性返回所有结果可能会消耗大量系统资源并导致响应时间过长。 分页查询是数据库中常用的一种技术,它允许...
4. **存储过程**:可以创建存储过程来封装分页逻辑,减少重复代码,提高效率。 四、分页策略 1. **静态分页**:固定每页的记录数,适合数据量变化不大且不需要实时更新的场景。 2. **动态分页**:根据用户需求动态...
例如,一个典型的分页存储过程可能接收两个输入参数:@PageSize(每页记录数)和@PageNumber(当前页号),并返回相应的数据。 接下来,我们讨论分页的实现步骤: 1. **创建存储过程**:在数据库中编写一个存储...
"sql分页存储过程"是指利用SQL语言编写的一个存储过程,这个过程专门用于执行分页查询。本文将详细讲解SQL分页存储过程的概念、原理以及如何实现。 首先,理解分页查询的基本概念。分页查询允许我们从数据库中按...
5. **使用示例**:在SQL Server中,一个简单的分页存储过程可能如下所示: ```sql CREATE PROCEDURE GetPagedData @PageIndex INT, @PageSize INT AS BEGIN SET NOCOUNT ON; DECLARE @StartIndex INT = (@...