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个例子
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 = '<(select min';
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);
参数说明:
第几页,显示的字段(如name,id),表名,Where后面的条件,排序的字段,1表示降序,id主键,25每页显示条数
//PHP调用
<?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"]."<br>";
echo $row["time"]."<br>";
}
mysql_close();
?>
来自: http://hi.baidu.com/abcfxr/blog/item/7479930194e1c88be950cd05.html
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个例子
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 = '<(select min';
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);
参数说明:
第几页,显示的字段(如name,id),表名,Where后面的条件,排序的字段,1表示降序,id主键,25每页显示条数
//PHP调用
<?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"]."<br>";
echo $row["time"]."<br>";
}
mysql_close();
?>
来自: http://hi.baidu.com/abcfxr/blog/item/7479930194e1c88be950cd05.html
发表评论
-
svn 权限分配
2010-09-19 11:39 2372转自:http://bbs.iusesvn.com/threa ... -
svn 安装配置-1
2010-09-19 11:38 1063转自:http://minedoc.iteye.c ... -
mysql数据库同步
2008-04-25 16:19 3881windows xp 下设置数据库 ... -
inverse
2008-01-17 10:31 1416前不久在搭建系统框架的时候遇到one-many与many-on ... -
CVSNT
2007-12-31 13:22 1648转自:http://blog.csdn.net/k ... -
mysql备份命令
2007-11-06 20:12 16104还原或者导入数据库命令: mysql -u root --p ... -
spry
2007-06-10 01:03 1569这几天给系统做页面级别的验证,主要是对一些输入参数进行控制。在 ... -
spring 发送html邮件
2007-05-05 19:00 8318对于spring发送邮件的部分看了几天,给小组的项目中添加了 ... -
lucene
2007-04-19 14:29 23131。今天研究了一下lucene ... -
outOfMemory
2006-12-31 16:17 2780收藏源地址:http://blog.s ... -
notify,wait,sleep
2006-12-29 22:29 2432转载别人的http://dev.cs ... -
ThreadPool
2006-12-25 21:33 1259package org.xml.upload; import ... -
数据库连接池
2006-12-25 21:31 1436package org.xml.upload; import ... -
arrayList
2006-12-25 21:28 1031private pool=new ArrayList(); p ... -
ArrayList 同步问题
2006-12-25 20:49 3593转载! [JAVA技术集锦]Java技巧:拷贝枚举器以加强效 ...
相关推荐
下面我们将深入探讨如何在SSM框架下实现MySQL的分页查询。 首先,我们来理解分页查询的基本概念。分页查询是指在获取数据时,不是一次性获取所有数据,而是按照一定的页码和每页的数据量来获取数据。这在展示大量...
本教程将深入探讨如何使用JDBC和MySQL实现分页查询。 首先,我们需要理解分页的基本概念。分页是将大型数据集分割成较小、更易管理的部分,通常每页包含一定数量的记录。在Web应用中,这通常通过设置“每页条目数”...
易语言MYSQL分页查询.rar 易语言MYSQL分页查询.rar 易语言MYSQL分页查询.rar 易语言MYSQL分页查询.rar 易语言MYSQL分页查询.rar 易语言MYSQL分页查询.rar
易语言源码MYSQL分页查询.rar 易语言源码MYSQL分页查询.rar 易语言源码MYSQL分页查询.rar 易语言源码MYSQL分页查询.rar 易语言源码MYSQL分页查询.rar 易语言源码MYSQL分页查询.rar易语言源码MYSQL分页查询.rar ...
本篇文章将深入探讨如何利用C++实现MySQL的分页查询功能,这对于处理大量数据时提高系统性能和用户体验至关重要。 首先,我们需要引入MFC(Microsoft Foundation Classes)库,这是一个由Microsoft为Windows平台...
总的来说,这个"MYSQL分页查询.zip"易语言项目源码是学习和实践MySQL分页查询的一个良好资源,无论你是初学者还是有一定经验的开发者,都可以从中受益。通过实际操作和理解代码,可以加深对MySQL数据库操作和易语言...
MySQL分页查询是数据库操作中常见的一种需求,特别是在数据量庞大的时候,为了提高用户体验,通常会采用分页的方式来展示数据。本篇文章将介绍一个通用的MySQL分页查询存储过程,适用于多种情况,帮助开发者实现高效...
这两天学习了nodejs mysql 实现分页,很重要,所以,今天添加一点小笔记。 代码如下 var express = require('express'); var router = express.Router(); var settings = require('../settings.js'); var mysql =...
mysql分页查询是我们经常见到的问题,那么应该如何实现呢?下面就教您一个实现mysql分页查询的好方法,供您参考学习。 mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句实现mysql分页...
本篇将详细介绍如何在易语言环境下实现MySQL的分页查询功能。 分页查询是数据库操作中的常见需求,它能够帮助用户在大量数据中高效地浏览和加载信息,而不是一次性加载所有记录,从而提高用户体验并减少服务器负担...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
总结来说,实现高效的MySQL分页查询需要考虑索引优化、使用新的SQL特性,以及借助合适的开发工具。同时,持续关注数据库性能监控,及时调整和优化查询策略,对于保持系统稳定和提升用户体验具有重要意义。
在MySQL分页查询中,主要涉及到的关键概念有SQL语句、LIMIT子句和OFFSET关键字。 1. SQL语句:在MySQL中,进行分页查询通常需要编写SQL(Structured Query Language)语句。基本的查询语法是`SELECT column_name(s)...
本篇文章将详细探讨如何基于Spring MVC实现分页查询,这对于任何处理大量数据的Web应用都是至关重要的。 首先,理解分页的基本概念。分页是将大型数据集划分为较小、更易管理的部分,以提高用户体验并减少服务器...
传统的mysql分页查询 select * from table limit n , m MySQL 执行此类SQL时需要先分页(默认一页1000条数据)通过全表扫描到N行,然后再去取M行。对于此类操作,获取前面少数几行数据会很快,但是随着扫描的记录数越...
### Oracle、SQL、MySQL 实现分页查询方法详解 在数据库操作中,分页查询是一项非常重要的技术,尤其是在处理大量数据时。本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server...
二、MySQL分页查询 在MySQL中,我们可以使用`LIMIT`和`OFFSET`关键字来实现分页。`LIMIT`用于指定每页显示的数据条数,`OFFSET`用于指定从哪一条记录开始取数据。例如,要获取第2页(每页5条数据)的信息,SQL语句...
通过上述分析可以看出,这个MySQL分页存储过程实现了灵活且高效的分页查询功能。它不仅能够根据用户提供的参数动态地构建查询语句,还能够处理排序、分组等复杂需求。对于需要频繁进行分页查询的应用场景来说,这种...