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小时内删除。