码迷,mamicode.com
首页 > 数据库 > 详细

mysql 分页存储过程

时间:2016-04-06 16:46:53      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

 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

 

mysql 分页存储过程

标签:

原文地址:http://www.cnblogs.com/micro-chen/p/5359855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!