阿影的黄金时代

一杯咖啡,一股浓香;一样青春,一样奔放;拼搏现在,奋斗未来。

原创 Mysql分页查询通用存储过程收藏

前段时间没有给出SQLServer转到Mysql的通用存储过程,本着共享的精神,为大家奉献这段Mysql分页查询通用存储过程,假设所用数据库为guestbook: 

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;

可以存储为数据库脚本,然后用命令导入:

mysql -u root -p < pageResult.sql;

调用:call prc_page_result(1, "*", "Tablename", "", "columnname", 1, "PKID", 25);

PS:若要转载,请注明作者与出处。

发表于 @ 2007年03月07日 00:33:00|评论(loading...)

新一篇: PHP与MYSQL交互函数表学习笔记 | 旧一篇: Apache2+PHP5开发环境配置

用户操作
[即时聊天] [发私信] [加为好友]
付春
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
付春的公告
青春是最大的财富,利用你的青春,打拼出你的世界。
春花那堪几度霜,
秋月谁与共孤光。
痴心若遇真情意,
翩翩彩蝶化红妆。
文章分类
收藏
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © 付春