标签:
1 /*test" 2 CALL sp_viewPage( 3 ‘*‘#查询字段 4 ,‘userupdatelog‘#表名 5 ,‘1=1‘#条件 6 ,‘Id desc‘#排序 7 ,1 #页码 8 ,20 #每页记录数 9 ,@totalcount #输出总记录数 10 ,@pagecount #输出用页数 11 ); 12 SELECT @totalcount,@pagecount; 13 */ 14 15 DROP PROCEDURE IF EXISTS `sp_viewPage`; 16 17 CREATE PROCEDURE sp_viewPage( 18 _fields VARCHAR(1000), #要查询的字段,用逗号(,)分隔 19 _tables TEXT, #要查询的表 20 _where VARCHAR(2000), #查询条件 21 _orderby VARCHAR(200), #排序规则 22 _pageindex INT, #查询页码 23 _pageSize INT, #每页记录数 24 /*_sumfields VARCHAR(200),#求和字段 */ 25 #输出参数 26 OUT _totalcount INT, #总记录数 27 OUT _pagecount INT #总页数 28 /* OUT _sumResult VARCHAR(2000)#求和结果 */ 29 ) 30 BEGIN 31 #140529-xxj-分页存储过程 32 #计算起始行号 33 SET @startRow = _pageSize * (_pageIndex - 1); 34 SET @pageSize = _pageSize; 35 SET @rowindex = 0; #行号 36 37 #合并字符串 38 SET @strsql = CONCAT( 39 #‘select sql_calc_found_rows @rowindex:=@rowindex+1 as rownumber,‘ #记录行号 40 ‘select sql_calc_found_rows ‘ 41 ,_fields 42 ,‘ from ‘ 43 ,_tables 44 ,CASE IFNULL(_where, ‘‘) WHEN ‘‘ THEN ‘‘ ELSE CONCAT(‘ where ‘, _where) END 45 ,CASE IFNULL(_orderby, ‘‘) WHEN ‘‘ THEN ‘‘ ELSE CONCAT(‘ order by ‘, _orderby) END 46 ,‘ limit ‘ 47 ,@startRow 48 ,‘,‘ 49 ,@pageSize 50 ); 51 52 PREPARE strsql FROM @strsql;#定义预处理语句 53 EXECUTE strsql; #执行预处理语句 54 DEALLOCATE PREPARE strsql; #删除定义 55 #通过 sql_calc_found_rows 记录没有使用 limit 语句的记录,使用 found_rows() 获取行数 56 SET _totalcount = FOUND_ROWS(); 57 58 #计算总页数 59 IF (_totalcount <= _pageSize) THEN 60 SET _pagecount = 1; 61 ELSE IF (_totalcount % _pageSize > 0) THEN 62 SET _pagecount = _totalcount / _pageSize + 1; 63 ELSE 64 SET _pagecount = _totalcount / _pageSize; 65 END IF; 66 END IF; 67 68 END
标签:
原文地址:http://www.cnblogs.com/micro-chen/p/5359855.html