MySQL での GROUP_CONCAT の使用例の分析

MySQL での GROUP_CONCAT の使用例の分析

この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明します。ご参考までに、詳細は以下の通りです。

現在、次の構造を持つ 3 つのテーブルがあります。

テーブルを分類:

テーブル `cate` を作成します (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 `name` char(20) DEFAULT '' COMMENT 'カテゴリ名',
 主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='記事カテゴリテーブル';

記事表:

テーブル「記事」を作成します(
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 `title` varchar(50) デフォルト ''
 `cate_id` int(11) NOT NULL DEFAULT '0' COMMENT 'カテゴリID',
 主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='Article table';

article_extendテーブル:

テーブル `article_extend` を作成します (
 `id` int(10) 符号なし NOT NULL AUTO_INCREMENT,
 `article_id` int(10) unsigned DEFAULT '0' COMMENT '記事ID',
 `name` varchar(255) DEFAULT '' COMMENT 'オーディオ、画像など',
 主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='添付ファイル テーブル';

3 つの表のデータは次のとおりです。

テーブルを分類:

記事表:

article_extendテーブル:

ここで問題が発生します。テーブル接続を介してクエリを実行し、記事 ID 1 の記事データを照会して、記事のタイトル、記事のカテゴリ、記事名を表示します。

選択
	a.id AS 援助、
	a.title は atitle として、
	c. NAME AS cname、
	ae.NAME AS aname
から
	記事として
左結合 cate AS c ON a.cate_id = c.id
article_extend を ae として LEFT JOIN し、 a.id = ae.article_id を ON します。
どこ
	1. 文字列を1行に並べます。

結果は次の通りで、2 つのデータが表示されます。

今、私は 1 つの結果、つまり名前フィールドだけを結合したいのですが、どうすればいいでしょうか?

これは GROUP_CONCAT でのみ可能です:

選択
	a.id AS 援助、
	a.title は atitle として、
	c. NAME AS cname、
	GROUP_CONCAT(ae.NAME SEPARATOR '-') AS aname
から
	記事として
左結合 cate AS c ON a.cate_id = c.id
article_extend を ae として LEFT JOIN し、 a.id = ae.article_id を ON します。
どこ
	1. 文字列を1行に並べます。

結果は次のとおりです。

さて、記事 ID で 1 つずつ検索するのではなく、すべてを取得したいのですが、複数の記事名を結合する必要がある場合、どうすればよいでしょうか。

選択
	a.id AS 援助、
	a.title は atitle として、
	c. NAME AS cname、
	ae.allname
から
	記事として
左結合(
	選択
		ae.記事ID、
		GROUP_CONCAT(ae.NAME) AS allname
	から
		記事を拡張する AS ae
	グループ化
		ae.記事ID
) AS ae ON a.id = ae.article_id
cate を c として LEFT JOIN し、 a.cate_id = c.id とします。

結果は次のとおりです。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • Python 3 の文字列 (一重引用符、二重引用符、三重引用符) と文字列と数値間の演算
  • Mysql で group_concat の長さ制限を変更する方法
  • MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題

<<:  Linux MySQL ルートパスワードを忘れた場合の解決方法

>>:  VMware15 の Deepin インストール詳細チュートリアル (画像とテキスト)

推薦する

JavaScript でカウントダウン効果を実装する

カウントダウン効果を実現するにはJavascriptを使用します。参考までに、具体的な内容は次のとお...

CSS flex 複数列レイアウト

基本的な3列レイアウト 。容器{ ディスプレイ: フレックス; 幅: 500ピクセル; 高さ: 20...

Docker で Nginx イメージ サーバーを構築する方法

序文一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベ...

Docker プライベートリポジトリの管理とローカルリポジトリ内のイメージの削除

1: Dockerプライベートウェアハウスのインストール1. イメージリポジトリからイメージをダウン...

CentOS 7 に Percona Server+MySQL をインストールする

1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...

MySQL の int(n) の後の n はどういう意味ですか?

int(1) の長さ 1 は、許可されたストレージ幅を表していないことはすでにご存知かもしれません...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

ReactのsetStateがマクロタスクなのかマイクロタスクなのかについて詳しく話しましょう

目次序文面接官は適切な質問をしていますか? § React は setState をどのように制御し...

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...

vue3 コンポーネント通信方法の概要と例

vue3コンポーネントの通信モードは次のとおりです。小道具$放出$expose / 参照$属性vモデ...

TypeScript における型保護の詳細な説明

目次概要型アサーション構文ではインスタンスオブ構文typeof構文要約する概要TypeScript ...

要素のel-tree複数選択ツリー(チェックボックス)親子ノードの関連付けが関連付けられていません

属性チェック-厳密公式ドキュメントでは、チェックボックスが表示されるときに親項目と子項目を互いに関連...

HTML の <input> タグの詳細な説明と、それを無効にする方法

定義と使用法<input> タグはユーザー情報を収集するために使用されます。 type ...

Nginx プロキシを使用してインターネットを閲覧する方法

私は通常、Tomcatや他のアプリケーションのリバースプロキシとしてnginxを使用しています。実際...