前段时间没有给出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); |
|