複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

MySQL 複数の無関係なテーブルクエリデータとページング

機能要件

主キーと外部キーの関連付けがない 3 つのテーブルから必要なデータを取り出し、ページ分割します。

データベーステーブル構造

フルーツテーブル:

ここに画像の説明を挿入

ナッツテーブル:

ここに画像の説明を挿入

ドリンクリスト:

ここに画像の説明を挿入

データベースは気軽に構築できますが、その方法が重要です。

主にUNION ALL演算子を使用する

UNION ALL 演算子は、2 つ以上の SELECT ステートメントの結果セットを結合するために使用されます。

UNION ALL 内の SELECT ステートメントには同じ数の列が必要であることに注意してください。列も同様のデータ型である必要があります。また、各 SELECT ステートメント内の列の順序は同じである必要があります。さらに、UNION ALL 結果セット内の列名は常に UNION ALL 内の最初の SELECT ステートメント内の列名と同じになります。

//詳細なSQL文 select * FROM
(
	(果物からfid、fname、price、typeを選択)
	ユニオンオール
	(ナットからタイプとして nid、名前、価格、6 を選択)
	ユニオンオール
	(drinks からタイプとして did、dname、price、7 を選択)
	
) as fnd limit 0,10 -----fndはテーブルの別名です

最終結果

ここに画像の説明を挿入

MySQL で複数のテーブルをクエリする際のページング問題の解決方法

mysql 1対多ページングの問題

部門テーブル: tbl_dept

従業員テーブル: tbl_emp

データベースSQLファイル

 
CREATE DATABASE /*!32312 存在しない場合は*/`ssm-crud` /*!40100 デフォルトの文字セット utf8 */;
 
`ssm-crud` を使用します。
 
/*テーブル `tbl_dept` のテーブル構造 */
 
`tbl_dept` が存在する場合はテーブルを削除します。
 
テーブル `tbl_dept` を作成します (
  `dept_id` int(11) NOT NULL AUTO_INCREMENT,
  `dept_name` varchar(255) デフォルト NULL,
  主キー (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 デフォルト CHARSET=utf8;
 
/*テーブル `tbl_dept` のデータ */
 
`tbl_dept`(`dept_id`,`dept_name`) の値に挿入します 
(1、「技術部門」)、
(2、「ビジネス部門」)
(6、「営業部」)
(7、「人事部」)
 
/*テーブル `tbl_emp` のテーブル構造 */
 
`tbl_emp` が存在する場合はテーブルを削除します。
 
テーブル `tbl_emp` を作成します (
  `emp_id` int(11) NOT NULL AUTO_INCREMENT,
  `emp_name` varchar(255) デフォルト NULL,
  `emp_gender` char(1) デフォルト NULL,
  `emp_email` varchar(255) デフォルト NULL,
  `d_id` int(11) デフォルト NULL,
  主キー (`emp_id`)、
  キー `FK_tbl_emp` (`d_id`)、
  制約 `FK_tbl_emp` 外部キー (`d_id`) 参照 `tbl_dept` (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 デフォルト CHARSET=utf8;
 
/*テーブル `tbl_emp` のデータ */
 
`tbl_emp`(`emp_id`,`emp_name`,`emp_gender`,`emp_email`,`d_id`) の値を挿入します 
(1,'シャオシェン','2',NULL,6),
(4,'シャオミン','1',NULL,1),
(5,'小紅','2',NULL,2),
(6,'小平','2',NULL,6),
(7,'小張','1',NULL,1),
(8,'小碕','1',NULL,1),
(9,'小花','1',NULL,1),
(10,'シャオヤン','2',NULL,1),
(11,'小海','2',NULL,2),
(12,'小強','1',NULL,6),
(13,'シャオチー','2',NULL,7);

ページングエラー書き込み方法(メインクエリ従業員テーブル)

tbl_empから*を選択
左結合 
tbl_dept d
 
ON d.dept_id = e.d_id
 
制限 1,10

サブクエリを使用して問題を解決する

選択
        *
    から
     (
       選択
       *
        から
        tbl_empe
        左結合 
    tbl_dept d
        ON d.dept_id = e.d_id
        
        GROUP BY e.d_id
        制限 1,10
 
     )
 
      左結合 tbl_dept d
        ON d.dept_id = e.d_id

以下のコードは無関係であり、バックアップのみを目的としています

選択
        フィートID、
        ft.partner_id AS パートナーID、
        ft.code 、
        ft.end_update_date は endUpdateDate として、
        フィート名、
        フィートタイプ、
        平方フィート面積、
        ft.is_default は isDefault です。
        fp.id fpId、
        fp.shop_id を fpShopId として、
        fp.provice_id は fpProviceId として、
        fp.provice_name AS fpProviceName、
        fp.start_num を fpStartNum として、
        fp.start_fee は fpStartFee として、
        fp.increase_num を fpIncreaseNum として、
        fp.increase_fee は fpIncreaseFee として、
        fp.code は fpCode として、
        fp.provice_text は fpProviceText として、
        fp.template_id は fpTemplateId として
    から
     (
       選択
        f.id、
        f.パートナーID、
        f.コード、
        f.end_update_date 、
        f.name 、
        f.type 、
        f.エリア、
        f.is_default 、
        f.is_del、
        f.作成日
        から
        バス貨物テンプレート f
        左結合 bus_freight_provice p
        ON f.id = p.template_id
        ここで、f.code = p.code
        かつ f.code = #[code]
        GROUP BY f.id
        制限 #{startPage}、#{pageSize}
 
     ) フィート
 
      左結合 bus_freight_provice fp
        ON ft.id = fp.template_id
    ここで、ft.code = fp.code
      fp.template_id が NULL ではない
      かつ ft.code = #[code]
      かつ fp.is_del = '0'
      かつ ft.is_del = '0'
 
      ft.create_date 降順で並び替え

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 数百万のデータに対するMySQLラージページクエリ最適化の実装
  • MySQLでページングクエリを実装する方法
  • MySQL ページングクエリ最適化テクニック
  • MySQLクエリのソートとページング関連
  • MySQL 最適化チュートリアル: 大規模なページングクエリ
  • MySQLを使用してページングクエリを実装する方法

<<:  よく使用される入力テキストボックスの内容は自動的に垂直方向に中央揃えされ、クリックするとデフォルトのプロンプトテキストは空になります。

>>:  ウェブデザインの仕事に応募する方法

推薦する

Layui は複数条件クエリのサンプルコードを実装します

最近ファイルシステムを作ったのですが、フィールドが多すぎることに気づきましたページングを使用した複数...

Vueライフサイクルの違いの詳細な説明

ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...

Vue3.xはコンポーネント通信にmitt.jsを使用します

目次クイックスタート使い方基本原則Vue2.x はコンポーネント通信に EventBus を使用しま...

MySQLのint主キーの自己増分の問題を解決する

導入MySQL データベースを使用する場合、int を主キーとして使用し、自動インクリメントに設定す...

VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

今夜の夕食後にノートパソコンの電源を入れたところ、問題が発生しました。通常、コンピューターがスリープ...

Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明

目次導入Tomcatへの接続方法APR と Tomcat ネイティブtomcat で APR を使用...

インターネット接続なしでLinux Centos7にアプリケーションをインストールする方法の詳細な説明

1. 前の章では、プログラムを yum リポジトリに直接インストールできることを学びましたが、そのた...

Javascript のスコープとクロージャの詳細

目次1. 範囲2. スコープチェーン3. 語彙の範囲5. 閉鎖の適用6. クロージャの欠陥7. 閉会...

vscodeでnpmを使用してbabelをインストールする方法

序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

JavaScript の組み込みオブジェクト 数学と文字列の詳細な説明

目次数学オブジェクト共通プロパティ一般的な方法Math.random()文字列メソッド長さプロパティ...

nginxのリソースキャッシュ設定の詳細な説明

私はずっとキャッシュについて学びたいと思っていました。結局のところ、キャッシュはフロントエンドのパフ...

CentOS7におけるKVM仮想化の基本管理の詳しい説明

1. kvm仮想化をインストールする : : : : : : : : : : : : : : : :...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

一般的なMySQLコマンドの概要

mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...