use guestbook;
delimiter $$
drop
procedure
if exists prc_page_result $$
create
procedure prc_page_result (
in currpageint,
in columnsvarchar(500),
in tablenamevarchar(500),
in sConditionvarchar(500),
in order_fieldvarchar(100),
in asc_fieldint,
in primary_field
varchar(100),
in pagesizeint
)
begin
declare sTempvarchar(1000);
declare sSqlvarchar(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();
?>
分享到:
相关推荐
MySql 分页 存储过程 MySql 分页 存储过程 MySql 分页 存储过程
MYSQL分页存储过程 非常实用的东西哦 希望大家能用上
通用Mysql分页存储过程,支持多表查询。
Mysql分页通用存储过程
近期项目中用到的分页存储过程,希望对大家有帮助。
mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页
针对mysql分页的一个存储过程,可以动态传入表名,可带查询条件,可带排序列
非常好用的mysql存储过程,支持大并发,很稳定,绝对原创,你值得拥有!
经测试,在 14483461 条记录中查询第 100000 页,每页 10 条记录按升序和降序第一次时间均为 0.47 秒,第二次时间均为 0.43 秒; 再生产环境中非常实用,帮助你解决线上数据库卡顿问题。
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1270970
mysql分页存储过程mysql分页存储过程mysql分页存储过程mysql分页存储过程
本通用分页存储过程经过我的验证,可以使用,支持联表查询,支持单表查询,效率我没测过太多,应该还可以。有需要的拿去用。 如果测试出效率,我们可以交流交流
改造过的mysql版本的分页存储过程,严格测试,绝对好用.适合大型项目使用.
MySQL存储过程编写总结文档,包括循环结构样式,创建临时表,删除数据,MySQL分页,动态存储过程编写
详细地介绍MYSQL命令行下,编写存储过程以及存储过程的调用,附带分页存储过程的详细代码,本人已经测过。
mysql通用存储过程sql脚本,支持多表,子查询,高级查询 分页
MySQL分页查询通用存储过程的代码总结
使用存储过程进行分页,适合多表 使用存储过程进行分页,适合多表
ORACLE和mssql 高效的分页存储过程,均通用,直接调用即可
更改语句结束符号 delimiter$$ 查看存储过程结构 show create procedure proc_name