1. >>>>>>>>>>###
2. #参数表
3. #1.sqlstr sql语句字符串
4. #2.pageNo 页码
5. #3.pageSize 页尺寸
6. #in sqlstr varchar(50),in pageNo int,in pageSize int
7. >>>>>>>>>>###
8.
9. begin
10. #总页数
11. declare sqlstr_new varchar(100);
12. #传入SQL总长度
13. declare sqlLength int default 0;
14. #SQL关键字'from'的位置
15. declare keyWordFromPos int default 1;
16.
17. #当前页码
18. set @currentPageNo=0;
19. #总页数
20. set @pageTotal=0;
21. #总记录数
22. set @records=0;
23. #转成小写字母SQL
24. set sqlstr_new=lcase(sqlstr);
25. #取得SQL总长度
26. set sqlLength=length(sqlstr);
27. #取得关键字'from'的位置
28. set keyWordFromPos=instr(sqlstr_new,'from');
29. #截取'from'之后的SQL
30. set @sub_sql_after_from = substr(sqlstr_new,keyWordFromPos,sqlLength);
31. #重建取记录总数SQL
32. set @rscount_sql=concat('select count(*) into @records' ,' ',@sub_sql_after_from);
33. #取得'from'之前的SQL
34. set @sub_sql_before_from= rtrim(ltrim(substr(sqlstr_new,1,keyWordFromPos-1)));
35. #重建查询SQL
36. set @pageSQL=concat(@sub_sql_before_from,',@currentPageNo,@pageTotal,@records',' ',@sub_sql_after_from);
37.
38. #统计总记录数
39. prepare rsCount_pre from @rscount_sql;
40. execute rsCount_pre;
41. deallocate prepare rsCount_pre;
42.
43. #分页
44. set @temp=@records%pageSize;
45. if @records<=pageSize then
46. set @pageTotal=1;
47. elseif @temp=0 then
48. set @pageTotal=@records div pageSize;
49. mysql存储过程使用 else
50. set @pageTotal=@records div pageSize+1;
51. end if;
52.
53. #过滤不合法的边界,防止页码不合法
54. if pageNo>@pageTotal then
55. set pageNo=@pageTotal;
56. elseif pageNo<1 then
57. set pageNo=1;
58. end if;
59.
60. #生成分页索引
61. set @currentPageNo=pageNo;
62. set @pageIndex=1;
63. set @pageIndex=pageSize*(pageNo-1);
64.
65. #重组SQL
66. set @pageSQL=concat(@pageSQL,' ','limit',' ',@pageIndex,',',pageSize);
67.
68. #查询结果
69. prepare pageExecute from @pageSQL;
70. execute pageExecute;
71. deallocate prepare pageExecute;
72.
73. end
备注:
1.Mysql中的整除
在Mysql中想用两个整数进行整除不能用"a/b" 而要用 a div b;
2.Mysql中的取余数(取模)
要用 a mod b 或 a%b
3.Mysq中四舍五入
round(1.5)
结果为2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论