首頁 > 資料庫 > mysql教程 > Vue+ElementUI如何實作分頁功能查詢mysql數據

Vue+ElementUI如何實作分頁功能查詢mysql數據

WBOY
發布: 2023-06-01 16:19:49
轉載
1845 人瀏覽過

    1.問題

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

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

    Vue+ElementUI如何實作分頁功能查詢mysql數據

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

    Vue+ElementUI如何實作分頁功能查詢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也就是目前頁數為第一頁。

    Vue+ElementUI如何實作分頁功能查詢mysql數據

    2.2取得資料庫資料的函數:getData():

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

    getData(offset,limit){
          this.axios.post(&#39;/php/select.php&#39;, qs.stringify({
            offset: offset,
            limit: limit,
            type: &#39;失物招领&#39;
          }), { headers: { &#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded&#39; } }).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<br/>

    現在資料表中總共有10條資料:

    Vue+ElementUI如何實作分頁功能查詢mysql數據

    #前端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[&#39;type&#39;];
    //获取前端的参数 开始和结束number
    if ( !isset( $_POST[&#39;offset&#39;] ) ) {
     echo 0;
     exit();
    };
    $offset = ( int )$_POST[&#39;offset&#39;];
    
    if ( !isset( $_POST[&#39;limit&#39;] ) ) {
     echo 0;
     exit();
    };
    $limit = ( int )$_POST[&#39;limit&#39;];
    //分页查询数据库
    $sql = "SELECT * FROM posts where type=&#39;$type&#39;  order by id desc LIMIT $limit OFFSET $offset";
    $result = $conn->query($sql);
    
    $sqlGetCount = "SELECT COUNT(*) cnt FROM posts where type=&#39;$type&#39;";
    $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(&#39;data&#39;=>$arr),array(&#39;total&#39;=>(int)$rescnt[&#39;cnt&#39;])));
     
    } else {
        echo 0;
    }
    mysqli_close( $conn );
    ?>
    登入後複製

    這裡使用了mysqllimit實作一次只查詢一部分數據,前端傳來了參數offsetlimit

    sql語句:

    "SELECT * FROM posts where type=&#39;$type&#39;  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=&#39;$type&#39;
    登入後複製

    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參數一定要和Paginationpage-size 屬性一致,也就時一次查詢一頁資料。而offset就是目前的頁數。

    以上是Vue+ElementUI如何實作分頁功能查詢mysql數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板