您的位置主页 > MYSQL

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);
http://blog.csdn.net/fcrpg2005/archive/2007/03/07/1522713.aspx