1. 程式人生 > 程式設計 >Vue+ElementUI 實現分頁功能-mysql資料

Vue+ElementUI 實現分頁功能-mysql資料

目錄
  • 1.問題
  • 2.解決
    • 2.1分頁元件
    • 2.2獲取資料的函式:getData():
    • 2.3頁面載入完成,需要請求第一頁的資料
  • 3.分析
    • 4.結果

      1.問題

      當資料庫中資料比較多時,就要每次只查詢一部分來緩解伺服器和頁面的壓力。這裡使用elementui的 Pagination 分頁 元件,配合limit語句,實現分頁查詢mysql資料。

      下圖是最基本的分頁樣式:

      在這裡插入圖片描述

      當然需要引入對應的事件,來實現頁面改變就查詢資料庫。

      在這裡插入圖片描述

      2.解決

      2.1分頁元件

      <el-pagination
              background
              layout="prev,pager,next"
              :page-size="8"
              :total="total"
              :current-page="pageNum"
              @current-change="handleCurrentChange">
      </el-pagination>
      
      

      data:初始化總資料條數(total)為1,pageNum也就是當前頁數為第一頁。

      在這裡插入圖片描述

      2.2獲取資料庫資料的函式:getData():

      引數為offsetlimit,向後端請求資料,待會兒解釋。這裡使用了qs序列化引數。可以參考我的另一篇部落格: + ElementUI + Viewer翻頁後圖片無法預覽 Vue父子元件非同步通訊問題 裡面解釋了qs的功能。

          getData(offset,limit){
            this.axios.post('//select.php',qs.stringoPRoHdify({
              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條資料:

      在這裡插入圖片描述

      前端getData請求的select.php

      檔案

      select.php:

      <?php
      $servername = "localhost";
      $username = "使用者名稱";
      $password = "密碼";
      $dbname = "資料庫名稱";
      
      // 建立連線
      $conn = new mysqli($servername,$username,$password,$dbname);
      // Check connection
      if ($conn->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;
       exoPRoHdit();
      };
      $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 on_encode( $arr,JSON_UNESCAPED_UNICODE );
       echo json_encode(array_merge(array('data'=>$arr),array('total'=>(int)$rescnt['cnt'])));
       
      } else {
          echo 0;
      }
      mysqli_close( $conn );
      ?>
      
      

      這裡使用了mysqllimit實現一次只查詢一部分資料,前端傳來了引數offsetlimit

      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()函式:

      在這裡插入圖片描述

      此時引數val=2,則offest = 8,limit = 8
      就會查詢第9~17條資料,如果沒有17條資料,也會返回查詢到9條後的所有資料。例如目前我資料庫就10條資料,那麼返回第9條和第10條兩條資料。

      同時select.php中頁返回了總資料條數total:

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

      在這裡插入圖片描述

      前端頁面獲取到total值後賦值給this.total(綁定了Pagination的total屬性,也就是總資料條數)。Pagination根據:page-size="8"屬性就會將資料自動分頁。例如後端返回的total為10,則分成兩頁。

      在這裡插入圖片描述

      4.結果

      頁面載入完成:因為我是根據id逆序查詢http://www.cppcns.com,所以獲取了第3~10條(共8條)資料。

      在這裡插入圖片描述

      點選第二頁或者翻頁按鈕:獲取第1、2條資料。

      在這裡插入圖片描述

      注意:你的limit引數一定要和Paginationpage-size屬性一致,也就時一次查詢一頁資料。而offset就是當前的頁數。

      到此這篇關於Vue+ElementUI 實現分頁查詢-mysql資料的文章就介紹到這了,更多相關Vue+ElementUI 實現分頁查詢內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!