Vue+ElementUI はページング関数を実装します - mysql データ

Vue+ElementUI はページング関数を実装します - mysql データ

1. 問題

データベースに大量のデータがある場合は、サーバーとページへの負荷を軽減するために、毎回そのデータの一部だけをクエリする必要があります。ここでは、 elementuiの Pagination コンポーネントとmysqllimitステートメントを使用して、mysql データのページング クエリを実装します。

次の図は最も基本的なページング スタイルです。

もちろん、ページが変更されたときにデータベースを照会するには、対応するイベントを導入する必要があります。

2. 解決策

2.1 ページングコンポーネント

<el-ページネーション
        背景
        レイアウト="前へ、ページャ、次へ"
        :ページサイズ="8"
        :total="合計"
        :current-page="ページ番号"
        @current-change="現在の変更を処理する">
</el-pagination>

data : データエントリの総数 ( total ) を 1 に初期化し、 pageNum (つまり現在のページ番号) を最初のページに初期化します。

2.2 データベースデータを取得する関数: getData():

パラメータはoffsetlimit 、バックエンドからデータをリクエストするために使用されます。これについては後で説明します。ここでは qs シリアル化パラメータが使用されます。私の他のブログを参照してください: Vue + ElementUI + Viewerページをめくると画像をプレビューできません。 Vue 親子コンポーネントの非同期通信の問題では、qs の機能について説明します。

    getData(オフセット,制限){
      this.axios.post('/php/select.php', qs.stringify({
        オフセット: オフセット、
        制限: 制限、
        タイプ: 「落とし物」
      }), { ヘッダー: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then((res) => {
        res.data === 0の場合{
          合計 = 0;
          このリスト = [];
          戻る;
        }
        this.total = res.data.total
        this.list = res.data.data
        this.loading = false
      }).catch((エラー) => {
        this.$message.error(err)
      })
    }

2.3 ページが読み込まれ、最初のページのデータを要求する必要がある

作成された(){
    0 を返します。
  },

ページの変更により、 handleCurrentChange()関数がトリガーされ、ページがめくられます。ここで、val パラメータは現在のページ番号です。new パラメータを使用します。

異なるページのデータを照会するには、getData を呼び出します。

    現在の変更を処理する(val){
      this.list = [] // 前のページのデータをクリアします this.getData((val-1)*8,8);
    }

以下はバックエンドデータです: php + mysql

現在、データ テーブルには 10 個のレコードがあります。

フロントエンドのgetDataによって要求されたselect.phpファイル

選択php:

<?php
$servername = "localhost";
$username = "ユーザー名";
$password = "パスワード";
$dbname = "データベース名";

// 接続を作成します $conn = new mysqli($servername, $username, $password, $dbname);
// 接続を確認する
($conn->connect_error) の場合 {
    die("接続に失敗しました: " . $conn->connect_error);
} 

$type = $_POST['type'];
//フロントエンドパラメータの開始番号と終了番号を取得します
if ( !isset( $_POST['offset'] ) ) {
 エコー0;
 出口();
};
$offset = ( int )$_POST['offset'];

if ( !isset( $_POST['limit'] ) ) {
 エコー0;
 出口();
};
$limit = ( int )$_POST['limit'];
//ページネーションクエリデータベース $sql = "SELECT * FROM posts where type='$type' order by id desc LIMIT $limit OFFSET $offset";
$result = $conn->query($sql);

$sqlGetCount = "type='$type' の posts から COUNT(*) cnt を選択";
$rescnt = $conn->クエリ($sqlGetCount);
$rescnt = $rescnt->fetch_assoc();
$arr = 配列();
($result->num_rows > 0)の場合{
 $row = $result->fetch_assoc() の間 {
    配列をプッシュします($arr, $row);
}
 //json_encode($arr, JSON_UNESCAPED_UNICODE) をエコーし​​ます。
 echo json_encode(array_merge(array('data'=>$arr),array('total'=>(int)$rescnt['cnt'])));
 
} それ以外 {
    エコー0;
}
mysqli_close($conn);
?>

ここでは、 mysql limitを使用して一度にデータの一部のみをクエリし、パラメータ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:は、データベース内の 0 から始まる最初の 8 つのデータ (0 は含みません。MySQL インデックスは 0 から始まります) を照会し、8 つのデータ、つまり 1 から 8 までのデータを照会することを意味します。
2 ページ目をクリックすると、 handleCurrentChange()関数がトリガーされます。

このとき、パラメータval=2offest = 8limit = 8
9番目から17番目のデータが照会されます。17番目のデータがない場合、9番目以降のすべてのデータが返されます。たとえば、データベースに 10 件のレコードがある場合、9 番目と 10 番目のレコードが返されます。

同時に、select.php はデータエントリの合計数を返します。

type='$type' の投稿から COUNT(*) cnt を選択

ここに画像の説明を挿入

フロントエンド ページはtotal値を取得した後、それをthis.total (データ項目の合計数であるPagination的totalにバインド) に割り当てます。 Pagination page-size="8"属性に従ってデータを自動的にページングします。たとえば、バックエンドから返される合計が 10 の場合、2 つのページに分割されます。

4. 結果

注: limitパラメータは、 Paginationpage-size属性と一致している必要があります。つまり、一度に 1 ページ分のデータをクエリします。 offsetは現在のページ番号です。

これで、Vue+ElementUI によるページング クエリの実装 - mysql データに関するこの記事は終了です。Vue+ElementUI によるページング クエリの実装に関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します
  • Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明
  • ホバープロンプトにはvue2+elementuiを使用する
  • Vue での ElementUI の使用に関する詳細な説明
  • Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

<<:  CSS3 で虫眼鏡効果を模倣するいくつかの方法の原理の分析

>>:  MySQLウィンドウ関数の具体的な使用法

推薦する

要素の水平方向の中央揃えを実現する3つの方法と、固定レイアウトとフローレイアウトの概念の理解

CSS でテキストを中央揃えにするプロパティは非常に簡単に実現できます。text-align:cen...

Linux 上でプロジェクトをリリースするために Tomcat を展開するプロセスにおけるさまざまな問題と解決策

プロジェクトをプロジェクトサイトのテスト環境にデプロイするJDK1.8トムキャット8.5 Maven...

MySQLはイベントを使用してスケジュールされたタスクを完了します

イベントでは、SQL コードを 1 回または一定の間隔で実行することを指定できます。通常、複雑な S...

ミニマルなウェブサイトデザインの例

Web アプリケーション クラス1. みんなのためにダウンまたは私だけのためにこのウェブサイトは、ウ...

Docker に Tomcat をインストールし、Springboot プロジェクトの WAR パッケージをデプロイする方法

簡単です。チュートリアルを見てください。ブロガー1. まずdockerを起動するサービスdocker...

ネストされた HTML ページの使用例 (フレームセットの使用)

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

入力が正しいにもかかわらず、MySQL 8.0 でアクセスが拒否される問題を解決する

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

VMware Workstation16 と Navicat リモート接続での Centos7 での MySQL8.0 インストール プロセス

目次1. CentOS7+MySQL8.0、yumソースインストール2. MySQLにログインしてパ...

グローバルトーストコンポーネントをカプセル化するVueの完全な例

目次序文1. vue-cliを使う1. Toastコンポーネントを定義する2. main.jsで設定...

Vue3.0 異なる解像度のコンピュータの適応操作

まず依存関係をインストールする必要があります npm i lib-flexible-computer...

初心者向けの一般的な Linux システムコマンドの完全なリスト

Linux コマンドの学習は、ほとんどの初心者にとって最大の障害です。今日は、Linux システムで...

border-radius 値の設定に関する質問

問題記録今日はプログレスバーに似た小さなコンポーネントを完成させるつもりでした。プロトタイプは次のよ...

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

Vueコンポーネントのルーティング強調表示問題の解決策

序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...