mysql 分页存储过程

Posted MicrobeORM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 分页存储过程相关的知识,希望对你有一定的参考价值。

 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:[email protected]+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

 

以上是关于mysql 分页存储过程的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存储过程分页 转载

mysql存储过程嵌套循环并分页处理数据

mysql分页存储过程一步一步实现

mysql 存储过程复习

mysql 存储过程复习

mysql 存储过程复习