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

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

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

推薦する

CentOS 8 に MySql をインストールしてリモート接続を許可する方法

ダウンロードしてインストールします。まず、システムに MySQL または MariaDB があるかど...

CentOS7 64でのMySQL5.6.40の詳細なインストール手順

CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...

DockerにMySQLをインストールする方法

最近 Django を導入しましたが、MySQL を手動でインストールしたくなかったので、Docke...

VUE のコンパイル スコープとスロット スコープのスロットの問題について

スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...

タイプファイルの入力ボタン機能の研究

<br />一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると[フ...

CocosCreatorでリストを作成する方法

CocosCreator バージョン: 2.3.4 Cocos には List コンポーネントがない...

MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

ログポイントベースのレプリケーション1. マスターデータベースとスレーブデータベースに専用のレプリケ...

Hadoop 2.Xの新機能、ごみ箱機能の説明

ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...

IDEAでVUEプロジェクトをデバッグするための詳細な手順

js コードをデバッグするには、コード内にデバッガーを記述するか、Chrome で毎回ブレークポイン...

MySQL で特定の親行のすべての子行を見つけるソリューション

序文注: テストデータベースのバージョンはMySQL 8.0ですテーブルを作成し、ユーザー scot...

Centos6.6 で php7 + nginx 環境をインストールする方法

この記事では、centos6.6 で php7 + nginx 環境をインストールする方法について説...

Deepin Linuxでカーネルを手動でアップグレードする方法

deepinとUbuntuどちらもdebianをベースにしたディストリビューションであり、ここではU...

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

Alibaba Cloud ECSインスタンスのユーザールートパスワードとリモート接続方法を設定する方法

Alibaba Cloud サーバーを購入した後、新しいインスタンスが正常に動作できるようにするには...

WeChat アプレット開発フォーム検証 WxValidate の使用

個人的には、WeChat アプレットの開発フレームワークは VUE と概ね似ていると感じていますが、...