当前位置:

首页 > 编程开发 > Vue+ElementUI如何实现分页功能查询mysql数据

Vue+ElementUI如何实现分页功能查询mysql数据

1.问题当数据库中数据比较多时,就要每次只查询一部分来缓解服务器和页面的压力。这里使用elementui的Pagination分页组件,配合mysql的limit语句,实现分页查询mysql数据。下图是最基本的分页样式:当然需要引入对应的事件,来实现页面改变就查询数据库。2.解决2.1分页组件data:初始化总数据条数(total)为1,pageNum也就是当前页数为第一页。2.2获取数据库数据的函数:getData():参数为offset,limit,向后端请求数据,待会儿解释。这里使用了qs序列化参数

本文目录

      1.问题

      当数据库中数据比较多时,就要每次只查询一部分来缓解服务器和页面的压力。这里使用elementui的 Pagination 分页 组件,配合mysql的limit语句,实现分页查询mysql数据。

      下图是最基本的分页样式:

      Vue+ElementUI如何实现分页功能查询mysql数据

      当然需要引入对应的事件,来实现页面改变就查询数据库。

      Vue+ElementUI如何实现分页功能查询mysql数据

      2.解决

      2.1分页组件

      
      

      data:初始化总数据条数(total)为1,pageNum也就是当前页数为第一页。

      Vue+ElementUI如何实现分页功能查询mysql数据

      2.2获取数据库数据的函数:getData():

      参数为offset,limit,向后端请求数据,待会儿解释。这里使用了qs序列化参数。可以参考我的另一篇博客:Vue + ElementUI + Viewer翻页后图片无法预览 Vue父子组件异步通信问题 里面解释了qs的功能。

      getData(offset,limit){
            this.axios.post('/php/select.php', qs.stringify({
              offset: offset,
              limit: limit,
              type: '失物招领'
            }), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then((res) => {
              if(res.data === 0){
                this.total = 0;
                this.list = [];
                return;
              }
              this.total = res.data.total
              this.list = res.data.data
              this.loading = false
            }).catch((err) => {
              this.$message.error(err)
            })
          }

      2.3页面加载完成,需要请求第一页的数据

      created () {
          this.getData(0,8);
        },

      页面改变触发handleCurrentChange()函数,即点击了翻页,其中val参数就是当前页数,使用新的参数,

      调用getData实现查询不同页面的数据:

      handleCurrentChange(val){
            this.list = [] //清空上一页数据
            this.getData((val-1)*8,8);
          }

      下面是后端数据:php + mysql

      现在数据表中总共有10条数据:

      Vue+ElementUI如何实现分页功能查询mysql数据

      前端getData请求的select.php文件

      select.php:

      connect_error) {
          die("连接失败: " . $conn->connect_error);
      } 
      
      $type = $_POST['type'];
      //获取前端的参数 开始和结束number
      if ( !isset( $_POST['offset'] ) ) {
       echo 0;
       exit();
      };
      $offset = ( int )$_POST['offset'];
      
      if ( !isset( $_POST['limit'] ) ) {
       echo 0;
       exit();
      };
      $limit = ( int )$_POST['limit'];
      //分页查询数据库
      $sql = "SELECT * FROM posts where type='$type'  order by id desc LIMIT $limit OFFSET $offset";
      $result = $conn->query($sql);
      
      $sqlGetCount = "SELECT COUNT(*) cnt FROM posts where type='$type'";
      $rescnt = $conn->query($sqlGetCount);
      $rescnt = $rescnt->fetch_assoc();
      $arr = array();
      if ($result->num_rows > 0) {
       while ( $row = $result->fetch_assoc() ) {
          array_push( $arr, $row );
      }
       //echo json_encode( $arr, JSON_UNESCAPED_UNICODE );
       echo json_encode(array_merge(array('data'=>$arr),array('total'=>(int)$rescnt['cnt'])));
       
      } else {
          echo 0;
      }
      mysqli_close( $conn );
      ?>

      这里使用了mysql的limit实现一次只查询一部分数据,前端传来了参数offset和limit。

      sql语句:

      "SELECT * FROM posts where type='$type'  order by id desc LIMIT $limit OFFSET $offset"

      3.分析

      这里的 LIMIT $limit OFFSET $offset的意思就是从 $offest的值开始,查询 $limit条数据。

      例如 $limit = 8, $offest = 0:表示查询数据库的前8条数据,从0开始(不包含0,mysql索引从0开始),查询8条,也就是1~8条数据。
      当我点击第二页时:触发handleCurrentChange()函数:

      Vue+ElementUI如何实现分页功能查询mysql数据

      此时参数val=2,则offest = 8, limit = 8。
      就会查询第9~17条数据,如果没有17条数据,也会返回查询到9条后的所有数据。例如目前我数据库就10条数据,那么返回第9条和第10条两条数据。

      同时select.php中页返回了总数据条数total:

      SELECT COUNT(*) cnt FROM posts where type='$type'

      Vue+ElementUI如何实现分页功能查询mysql数据

      前端页面获取到total值后赋值给this.total(绑定了Pagination的total属性,也就是总数据条数)。Pagination根据:page-size="8"属性就会将数据自动分页。例如后端返回的total为10,则分成两页。

      Vue+ElementUI如何实现分页功能查询mysql数据

      4.结果

      页面加载完成:因为我是根据id逆序查询,所以获取了第3~10条(共8条)数据。

      Vue+ElementUI如何实现分页功能查询mysql数据

      点击第二页或者翻页按钮:获取第1、2条数据。

      Vue+ElementUI如何实现分页功能查询mysql数据

      注意:你的limit参数一定要和Pagination的page-size属性一致,也就时一次查询一页数据。而offset就是当前的页数。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 MySQL VUE
      相关文章 更多
      vue上传文件格式怎么设置及要求说明
      vue上传文件格式怎么设置及要求说明

      学习如何在Vue项目中设置文件上传格式限制。本文介绍使用HTML accept属性进行基础过滤,以及结合JavaScript进行严格后缀名校验的方法,确保只允许指定类型的文件被上传。

      navicat导入数据库步骤详解及常见问题处理教程
      navicat导入数据库步骤详解及常见问题处理教程

      详解Navicat导入数据库的标准步骤,涵盖SQL脚本执行与CSV数据导入两种核心场景。针对导入过程中常见的字符集乱码、主键冲突及外键约束错误,提供具体的设置方法与修复建议,确保数据迁移准确无误。

      SQL主键约束和唯一约束有什么区别
      SQL主键约束和唯一约束有什么区别

      深入理解SQL PRIMARY KEY与UNIQUE约束的区别。文章从行标识与重复限制的目标出发,详解主键的非空特性、外键引用角色以及多数据库对NULL值的处理差异。结合users表实战示例,指导开发者如何根据字段稳定性与业务语义合理选择约束类型,避免设计误区。

      SQL约束有哪些类型及作用
      SQL约束有哪些类型及作用

      刚开始设计关系型数据库?了解PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、CHECK、DEFAULT等约束的作用、语法和排错方法。本文以PostgreSQL语法为主,结合用户订单场景,清晰展示如何防止脏数据并处理常见约束冲突。

      SQL游标常见错误排查:死锁与资源未释放问题
      SQL游标常见错误排查:死锁与资源未释放问题

      深入解析SQL游标导致的死锁与资源未释放问题。通过PostgreSQL与MySQL语法对比,展示如何识别长事务持锁、分析锁等待链,并提供短事务提交、异常清理及批量处理的最佳实践,确保数据库连接与锁资源及时释放。

      SQL中怎么创建和删除约束
      SQL中怎么创建和删除约束

      后端开发者在维护数据库时,常需对现有表添加主键、唯一或外键约束。若直接执行ADD CONSTRAINT,往往因存量数据不合规导致报错。本文详解操作前的数据清洗步骤、标准SQL语法及MySQL等特殊写法,帮助你在生产环境安全完成结构变更。

      SQL分组统计查询:GROUP BY与HAVING子句用法示例
      SQL分组统计查询:GROUP BY与HAVING子句用法示例

      针对 SQL 初学者的分组统计实战指南。深入解析 GROUP BY 分组机制、WHERE 与 HAVING 的执行时机差异,以及 COUNT 函数对 NULL 值的处理逻辑。通过具体代码示例演示如何正确筛选聚合结果,并排查因 JOIN 连接导致的统计数据异常,提升报表准确性。

      SQL Server与MySQL游标基本语法及完整代码示例
      SQL Server与MySQL游标基本语法及完整代码示例

      本文详细对比SQL Server和MySQL中游标的基本用法。从DECLARE声明到FETCH遍历,再到CLOSE关闭与DEALLOCATE/Handler清理,解析两者在语法结构、变量接收及异常处理上的核心差异。通过标准代码示例展示如何安全使用游标,避免资源泄漏,适用于需要进行数据库存储过程开发或跨平台迁移的开发者。

      SQL多表连接区别:INNER JOIN与LEFT JOIN的使用场景
      SQL多表连接区别:INNER JOIN与LEFT JOIN的使用场景

      深入解析SQL中INNER JOIN与LEFT JOIN的核心区别。通过users和orders表实例,展示匹配行保留与NULL补位机制,重点讲解ON与WHERE子句中放置右表过滤条件的不同后果,提供防止LEFT JOIN退化的实战技巧及行数异常排查步骤。

      SQL CHECK约束的用法与取值范围限制
      SQL CHECK约束的用法与取值范围限制

      深入理解 SQL CHECK 约束在 PostgreSQL、MySQL 等数据库中的实现差异。文章通过订单业务场景,讲解如何定义单列范围与多列逻辑约束,分析 NULL 值对布尔条件的影响,并提供修改已有表结构时的安全操作建议,帮助开发者构建更健壮的数据完整性防线。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。