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

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

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

推薦する

Vue 値転送の 12 の方法の概要

目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

HTML の大なり、小なり、スペース、引用符などでよく使用されるエスケープ コードのリスト。

表は以下のとおりです。 HTMLソースコード結果を表示説明する&lt; <未満記号また...

Nginx 経由で Tomcat9 クラスターを構築し、セッション共有を実現する

Nginx を使用して Tomcat9 クラスターを構築し、Redis を使用してセッション共有を実...

Node.js コンソールで強調表示されたコードを印刷する方法

序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...

Ubuntuデュアルシステムが起動時に停止する問題の解決方法の詳細な説明

起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...

分散監視システムにおけるZabbixのアクティブ、パッシブ、Web監視のプロセスの詳細な説明

前回の記事では、Zabbix のネットワーク検出機能について学習し、アクションと組み合わせてホストの...

MySQLのジョイントクエリについて詳しく説明します

目次ユニオンクエリ1. 中国の各省のIDと名前を照会する2. 湖南省のすべての地級市のIDと名称3....

Vueモバイル端末が指のスライド効果を実現

この記事の例では、Vueモバイル端末で指のスライド効果を実現するための具体的なコードを紹介します。具...

ブラウザがクロージャをどのように認識するかについて詳しく説明します

目次序文クロージャの紹介メモリのゴミを識別する方法クロージャのメモリ表現結論序文クロージャは、Jav...

CSS で水平方向と垂直方向に中央揃えする 10 の方法を教えます (要約)

面接には必需品、仕事でも必ず使います。うーん、誰でも分かるでしょう。これ以上何も言わずに、要約とレン...

docker に基づいて nginxssl 設定を開始する

前提条件クラウドサーバー(Alibaba Cloud、Tencent CloudなどのcentOS)...

docker windows10共有ディレクトリのマウント失敗の解決策

原因docker スクリプトを実行すると、コンテナを作成できないというエラーが発生します。以下のよう...

Vue で CSS カスタム変数を使用する方法

目次CSS カスタム変数機能は古くから存在していますが、実際の開発ではあまり使用されていません。その...

Linux /etc/network/interfaces 設定インターフェース方法

Linux の /etc/network/interfaces ファイルは、ネットワーク インターフ...