mysql 通用存储过程分页 海量数据分页
2013-05-29 17:19
531 查看
转 /article/11740313.html
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL auto_increment,
`sort` int(11)
`title` varchar(50),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1 ;
存储过程代码
DELIMITER $$;
DROP PROCEDURE IF EXISTS `sp_page`$$
CREATE PROCEDURE `sp_page`(
in _pagecurrent int,/*当前页*/
in _pagesize int,/*每页的记录数*/
in _ifelse varchar(1000),/*显示字段*/
in _where varchar(1000),/*条件*/
in _order varchar(1000)/*排序*/
)
COMMENT '分页存储过程'
BEGIN
if _pagesize<=1 then
set _pagesize=20;
end if;
if _pagecurrent < 1 then
set _pagecurrent = 1;
end if;
set @strsql = concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);
prepare stmtsql from @strsql;
execute stmtsql;
deallocate prepare stmtsql;
set @strsqlcount=concat('select count(1) as count from ',_where);/*count(1) 这个字段最好是主键*/
prepare stmtsqlcount from @strsqlcount;
execute stmtsqlcount;
deallocate prepare stmtsqlcount;
END$$
DELIMITER ;$$
调用代码
调用例1 call sp_Page(1,3,'*','test','order by id desc');
调用例2 call sp_Page(1,3,'*','test where sort=1','order by id desc');
调用例3 call sp_Page(1,3,'id,title','test where sort=1','order by id desc');
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
我在mysql中运行发现出现问题,重新写了下,又没有问题,估计是字符集的问题
drop procedure if exists _PageQuery;
DELIMITER $$
create procedure _PageQuery(
in _pagecurrent int,/*当前页*/
in _pagesize int,/*每页的记录数*/
in _ifelse varchar(1000),/*显示字段*/
in _where varchar(1000),/*条件*/
in _order varchar(1000)/*排序*/
)
begin
if _pagesize<=1 then
set _pagesize=20;
end if;
if _pagecurrent<1 then
set _pagecurrent=1;
end if;
set @strsql=concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);
prepare stmtsql from @strsql;
execute stmtsql;
deallocate prepare stmtsql;
set @strsqlcount=concat('select count(1) as count from ',_where);
prepare stmtsqlcount from @strsqlcount;
execute stmtsqlcount;
deallocate prepare stmtsqlcount;
end $$
delimiter;
call _PageQuery(2,10,'*','gt_user','order by userid desc');
call _PageQuery(2,10,'username,petname,pic','gt_user','order by userid desc');
call _PageQuery(1,10,'*','gt_user where age=50 ','order by userid desc');
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL auto_increment,
`sort` int(11)
`title` varchar(50),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 AUTO_INCREMENT=1 ;
存储过程代码
DELIMITER $$;
DROP PROCEDURE IF EXISTS `sp_page`$$
CREATE PROCEDURE `sp_page`(
in _pagecurrent int,/*当前页*/
in _pagesize int,/*每页的记录数*/
in _ifelse varchar(1000),/*显示字段*/
in _where varchar(1000),/*条件*/
in _order varchar(1000)/*排序*/
)
COMMENT '分页存储过程'
BEGIN
if _pagesize<=1 then
set _pagesize=20;
end if;
if _pagecurrent < 1 then
set _pagecurrent = 1;
end if;
set @strsql = concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);
prepare stmtsql from @strsql;
execute stmtsql;
deallocate prepare stmtsql;
set @strsqlcount=concat('select count(1) as count from ',_where);/*count(1) 这个字段最好是主键*/
prepare stmtsqlcount from @strsqlcount;
execute stmtsqlcount;
deallocate prepare stmtsqlcount;
END$$
DELIMITER ;$$
调用代码
调用例1 call sp_Page(1,3,'*','test','order by id desc');
调用例2 call sp_Page(1,3,'*','test where sort=1','order by id desc');
调用例3 call sp_Page(1,3,'id,title','test where sort=1','order by id desc');
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
我在mysql中运行发现出现问题,重新写了下,又没有问题,估计是字符集的问题
drop procedure if exists _PageQuery;
DELIMITER $$
create procedure _PageQuery(
in _pagecurrent int,/*当前页*/
in _pagesize int,/*每页的记录数*/
in _ifelse varchar(1000),/*显示字段*/
in _where varchar(1000),/*条件*/
in _order varchar(1000)/*排序*/
)
begin
if _pagesize<=1 then
set _pagesize=20;
end if;
if _pagecurrent<1 then
set _pagecurrent=1;
end if;
set @strsql=concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);
prepare stmtsql from @strsql;
execute stmtsql;
deallocate prepare stmtsql;
set @strsqlcount=concat('select count(1) as count from ',_where);
prepare stmtsqlcount from @strsqlcount;
execute stmtsqlcount;
deallocate prepare stmtsqlcount;
end $$
delimiter;
call _PageQuery(2,10,'*','gt_user','order by userid desc');
call _PageQuery(2,10,'username,petname,pic','gt_user','order by userid desc');
call _PageQuery(1,10,'*','gt_user where age=50 ','order by userid desc');
相关文章推荐
- mysql 通用存储过程分页 海量数据分页
- mysql 通用存储过程分页 海量数据分页
- 实现小数据量和海量数据的通用分页显示存储过程
- 基于Mysql的通用分页存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- .net海量数据分页通用存储过程
- mysql通用分页存储过程
- Mysql分页查询通用存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 一个通用MSSQL海量数据分页存储过程
- .net海量数据分页通用存储过程
- 基于Mysql的通用分页存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 一个通用MSSQL海量数据分页存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- [百万级]通用存储过程.分页存储过程
- SQL Server 2000通用分页查询存储过程(可指定返回字段,查询条件)