Mysql 分页存储过程代码

本文介绍了一个通用的MySQL存储过程分页查询方法,包括查询信息列表及查询总行数的功能,并详细解释了如何根据传入的参数进行灵活的分页和排序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目是用mysql存储过程,琢磨了下通用的mysql 存储过程分页写法,觉得通用度很高,随笔记下分享。

 

分页信息列表查询

PROCEDURE xx.p_common_findByPage(IN tableName varchar(2000), IN fieldsNames varchar(500), IN pageIndex int, IN pageSize int, IN sortName varchar(200), IN strWhere varchar(500))
BEGIN

  --  通用分页查询存储过程,如果不传入分页参数,则可以查询全部信息

  DECLARE fieldlist varchar(200);
  IF fieldsNames = '' || fieldsNames IS NULL THEN
    SET fieldlist = '*';
  ELSE
    SET fieldlist = fieldsNames;
  END IF;


  IF strWhere = '' || strWhere IS NULL THEN
    IF sortName = '' || sortName IS NULL THEN
      IF pageIndex = '' ||  pageIndex IS NULL THEN 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName);
      ELSE 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' LIMIT ', (pageIndex - 1) * pageSize, ',', pageSize);
      END IF ;
    ELSE
      IF  pageIndex = '' ||  pageIndex IS NULL THEN 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' ORDER BY ', sortName);
      ELSE 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' ORDER BY ', sortName, ' LIMIT ', (pageIndex - 1) * pageSize, ',', pageSize);
      END IF ;
      
    END IF;
  ELSE
    IF sortName = '' || sortName IS NULL THEN
      IF  pageIndex = '' ||  pageIndex IS NULL THEN 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' WHERE ', strWhere);
      ELSE 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' WHERE ', strWhere, ' LIMIT ', (pageIndex - 1) * pageSize, ',', pageSize);
      END IF ;
      
    ELSE
      IF  pageIndex = '' ||  pageIndex IS NULL THEN 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' WHERE ', strWhere, ' ORDER BY ', sortName);
      ELSE 
        SET @strSQL = CONCAT('SELECT ', fieldlist, ' FROM ', tableName, ' WHERE ', strWhere, ' ORDER BY ', sortName, ' LIMIT ', (pageIndex - 1) * pageSize, ',', pageSize);
      END IF ;
    END IF;
  END IF;


  PREPARE stmt1 FROM @strSQL;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;

END
分页信息查询总行数

PROCEDURE xx.p_common_findByPageCnt(IN tableName varchar(2000), IN sortName varchar(200), IN strWhere varchar(500))
BEGIN

  --  通用分页查询存储过程,查询分页信息中行数

  IF strWhere = '' || strWhere = NULL THEN
    IF sortName = '' || sortName = NULL THEN
      SET @strSQL = CONCAT('SELECT count(*) cnt FROM ', tableName);
    ELSE
      SET @strSQL = CONCAT('SELECT count(*) cnt FROM ', tableName, ' ORDER BY ', sortName);
    END IF;
  ELSE
    IF sortName = '' || sortName = NULL THEN
      SET @strSQL = CONCAT('SELECT count(*) cnt FROM ', tableName, ' WHERE ', strWhere);
    ELSE
      SET @strSQL = CONCAT('SELECT count(*) cnt FROM ', tableName, ' WHERE ', strWhere, ' ORDER BY ', sortName);
    END IF;
  END IF;


  PREPARE stmt1 FROM @strSQL;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;

END



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值