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

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

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

推薦する

MySQL で誤って削除したテーブル データを回復する方法 (必読)

バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...

ウェブページの右下隅に「いいね!」カード効果を実現するための CSS (サンプルコード)

効果 HTML を実装するには、まずクリーンな HTML ページを準備し、ノードを記述します。 &l...

ブラウザが登録できるイベントの概要

HTML イベント リスト一般イベント: onClick HTML: マウスクリックイベント。主にオ...

div画像マーキーシームレス接続実装コード

コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...

HttpとHttpsの両方をサポートするNginxの詳細な設定

最近の Web サイトでは Https をサポートすることがほぼ標準機能となっており、Nginx は...

Vueはカスタム命令を使用してページの下部に透かしを追加します

プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

1. コンセプト1. ホットバックアップとバックアップの違いホット バックアップは高可用性 (HA)...

MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要

1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...

Linuxで相対パスを表現する方法

たとえば、現在のパスが /var/log で、/usr ディレクトリに移動する場合は、次のコマンドを...

CSS3 は 3D キューブの読み込み効果を作成します

簡単な説明これは CSS3 のクールな 3D キューブのプリロード効果です。この特殊効果は、シンプル...

MySQLクエリ文の実行プロセスを理解するための記事

序文要件を満たす特定のデータをデータベースから取得する必要があります。Select ABC FROM...

MySQL および Oracle のバッチ挿入 SQL の一般的な記述例

目次例えば:一般的な執筆:要約する例えば:次に、データベースのUSERテーブルにUserオブジェクト...

Mysql 更新マルチテーブル共同更新方法の概要

次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...