• MySql 分页存储过程


    DELIMITER $$ #改动分隔符为 $$
    DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符
    CREATE PROCEDURE sp_MvcCommonDataSource (
    	#输入參数
    	_fields VARCHAR(2000), #要查询的字段,用逗号(,)分隔
    	_tables TEXT,  #要查询的表
    	_where VARCHAR(2000),   #查询条件
    	_orderby VARCHAR(200),  #排序规则
    	_pageindex INT,  #查询页码
    	_pageSize INT,   #每页记录数
    	_sumfields VARCHAR(200),#求和字段
    	#输出參数
    	OUT _totalcount INT,  #总记录数
    	OUT _pagecount INT,    #总页数
    	OUT _sumResult VARCHAR(2000)#求和结果
    )
    BEGIN
    	#140529-xxj-分页存储过程
    	#计算起始行号
    	SET @startRow = _pageSize * (_pageIndex - 1);
    	SET @pageSize = _pageSize;
    	SET @rowindex = 0; #行号
    
    	#合并字符串
    	SET @strsql = CONCAT(
    		#'select sql_calc_found_rows  @rowindex:=@rowindex+1 as rownumber,' #记录行号
    		'select sql_calc_found_rows '
    		,_fields
    		,' from '
    		,_tables
    		,CASE IFNULL(_where, '') WHEN '' THEN '' ELSE CONCAT(' where ', _where) END
    		,CASE IFNULL(_orderby, '') WHEN '' THEN '' ELSE CONCAT(' order by ', _orderby) END
    	  ,' limit ' 
    		,@startRow
    		,',' 
    		,@pageSize
    	);
    
    	PREPARE strsql FROM @strsql;#定义预处理语句 
    	EXECUTE strsql;							#运行预处理语句 
    	DEALLOCATE PREPARE strsql;	#删除定义 
    	#通过 sql_calc_found_rows 记录没有使用 limit 语句的记录,使用 found_rows() 获取行数
    	SET _totalcount = FOUND_ROWS();
    
    	#计算总页数
    	IF (_totalcount <= _pageSize) THEN
    		SET _pagecount = 1;
    	ELSE IF (_totalcount % _pageSize > 0) THEN
    		SET _pagecount = _totalcount / _pageSize + 1;
    	ELSE
    		SET _pagecount = _totalcount / _pageSize;
    	END IF;
    	END IF;
    
    	#计算求和字段
    	IF (IFNULL(_sumfields, '') <> '') THEN
    		#序列sum结果
    		SET @sumCols = CONCAT (
    			'CONCAT_WS(',','
    			,'SUM('
    			,REPLACE(_sumfields,',','),SUM(')
    			,'))');
    		#拼接字符串
    		SET @sumsql = CONCAT(
    			'select '
    			,@sumCols
    			,' INTO @sumResult from '
    			,_tables
    			,CASE IFNULL(_where, '') WHEN '' THEN '' ELSE CONCAT(' where ', _where) END
    			,';'
    		);
    		#select @sumsql;
    		PREPARE sumsql FROM @sumsql;#定义预处理语句 
    		EXECUTE sumsql;	
    		SET _sumResult = @sumResult;						#运行预处理语句 
    		DEALLOCATE PREPARE sumsql;	#删除定义 
    
    	END IF;
    
    END$$
    DELIMITER ; #改动分隔符为分号(;)
    
    
    ##################################################
    # 測试存储过程
    #select order_no,order_date,order_type from `order`;
    
    CALL sp_MvcCommonDataSource(
    'order_no,order_date,order_type'#查询字段
    ,'`order`'#表名
    ,'1=1'#条件
    ,'order_no asc'#排序
    ,2 #页码
    ,3 #每页记录数
    ,'order_no,order_no'#求和字段
    ,@totalcount #输出总记录数
    ,@pagecount #输出用页数
    ,@sumResult #求和结果
    );
    SELECT @totalcount,@pagecount,@sumResult;


  • 相关阅读:
    基于android混合开发的JsBridge技术学习
    使用centos引导内核错误:kernel: pnp 00:0b: can't evaluate _CRS: 8
    mysql的错误:The server quit without updating PID file /usr/local/mysql/data/door.pid).
    关于新的man版本出现“无法解析 /usr/share/man/zh_CN/man1/ls.1.gz: 没有那个文件或目录“
    使用struts2标签<s:action无法显示引用页面问题
    cookie 跨域的问题
    mysql8.0 在window环境下的部署与配置
    webconfig的配置解析
    C#.net 创建XML
    HashMap和HashTable的区别
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3807640.html
Copyright © 2020-2023  润新知