mysql 分页存储过程
时间:2021-07-01 10:21:17
帮助过:3人阅读
/*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 分页存储过程
标签: