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();
?>