複数の無関係なテーブルからデータをクエリし、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を使用してページングクエリを実装する方法

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

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

推薦する

VMware 仮想マシンのインストール Linux システムのグラフィック チュートリアル

この記事では、LinuxシステムのVMwareインストールの具体的な手順を参考までに紹介します。具体...

Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています

1. まずリクエスト設定ファイルを見て、axios.createメソッドを見てください。baseUR...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

Videojs+swiper が Taobao の商品詳細カルーセルを実現

この記事では、Taobao商品詳細のカルーセルを実現するためのvideojs+swiperの具体的な...

js でクラスセレクターと名前属性セレクターを実装する手順の例

jQuery の登場により、DOM の操作効率が大幅に向上し、開発がより高いレベルに引き上げられまし...

JavaScript でクールなマウス テーリング効果を実装

これを見た後、あなたにも手ができて、さまざまな美しい小さなしっぽを作れるようになることを保証します!...

JavaScript 文字列操作の 4 つの実用的なヒント

目次序文1. 文字列を分割する2. JSONのフォーマットと解析3. 複数行の文字列と埋め込み式4....

Windows で MySQL 5.7.17 をインストールし、エンコードを utf8 に設定する方法

ダウンロードMySQL 公式ダウンロード、Windows (x86、64 ビット)、ZIP アーカイ...

JavaScript キャンバスはマウスの動きに合わせてボールを動かすことを実装します

この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...

HTML の基礎: HTML コンテンツの詳細

まずは本体から始めましょう:ウェブページを閲覧するとき、最初に目に留まるのは通常、ページの背景です。...

IE6 での PNG アルファ透明度 (完全コレクション)

IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...

JS ES の新機能、変数分離割り当て

目次1. 配列の分離割り当て1.1 配列分離割り当てとは何ですか? 1.2 配列分離割り当てに失敗し...

2つのシンプルなメニューナビゲーションバーの例

メニューバーの例 1: コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

MySQL 8.0 の非表示列に対する基本操作

目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...