質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

3356閲覧

Cakephp3のSQL文について

ssk

総合スコア332

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/02/23 17:18

PHP

1//Hoges.Contoroller.php 2->select([ 3'id','dal01','dal02','dal03','dal04','dal05','dal06','dal07','dal08','dal09','dal10','dal11','dal12','dal13','dal14', 4'dal15' => 'group_concat(Dal_List1s.Ms_azdal1 SEPARATOR ";")', 5'dal16' => 'group_concat(Dal_List2s.Ms_azdal2 SEPARATOR ";")', 6] 7 ) 8->join([ 9'table' => 'dal_list1s', 10'type' => 'LEFT', 11'conditions' => 'dal_list1s.datacklist_id = datacklists.id' 12 ]) 13->join([ 14'table' => 'az_dal1s', 15'type' => 'LEFT', 16'conditions' => 'az_dal1s.id = dal_list1s.ms_azdal1' 17 ]) 18->join([ 19'table' => 'dal_list2s', 20'type' => 'LEFT', 21'conditions' => 'dal_list2s.datacklist_id = datacklists.id' 22 ]) 23->join([ 24'table' => 'az_dal2s', 25'type' => 'LEFT', 26'conditions' => 'az_dal2s.id = dal_list2s.ms_azdal2' 27 ]) 28->where([ 29'datacklists.id' => $id 30 ]) 31->group(['datacklists.id']); 32 33$datacklist = $query->first();

取得されているgroup_concatの箇所

'dal15' => '3;5;6;3;5;6;3;5;6', 'dal16' => '4;4;4;5;5;5;6;6;6',

レコードが9行、生成されているため
このような現象になっているかと、、、

'dal15' => '3;5;6;', 'dal16' => '4;5;6',

と取得したいです。
発行しているSQL文は以下です。

SQL

1SELECT 2 Datacklists.id AS `Datacklists__id`, 3 Datacklists.dal01 AS `Datacklists__dal01`, 4 Datacklists.dal02 AS `Datacklists__dal02`, 5 Datacklists.dal03 AS `Datacklists__dal03`, 6 Datacklists.dal04 AS `Datacklists__dal04`, 7 Datacklists.dal05 AS `Datacklists__dal05`, 8 Datacklists.dal06 AS `Datacklists__dal06`, 9 Datacklists.dal07 AS `Datacklists__dal07`, 10 Datacklists.dal08 AS `Datacklists__dal08`, 11 Datacklists.dal09 AS `Datacklists__dal09`, 12 Datacklists.dal10 AS `Datacklists__dal10`, 13 Datacklists.dal11 AS `Datacklists__dal11`, 14 Datacklists.dal12 AS `Datacklists__dal12`, 15 Datacklists.dal13 AS `Datacklists__dal13`, 16 Datacklists.dal14 AS `Datacklists__dal14`, 17 group_concat( 18 Dal_List1s.Ms_azdal1 SEPARATOR ";" 19 ) AS `dal15`, 20 group_concat( 21 Dal_List2s.Ms_azdal2 SEPARATOR ";" 22 ) AS `dal16` 23FROM 24 datacklists Datacklists 25 LEFT JOIN dal_list1s ON dal_list1s.datacklist_id = datacklists.id 26 LEFT JOIN az_dal1s ON az_dal1s.id = dal_list1s.ms_azdal1 27 LEFT JOIN dal_list2s ON dal_list2s.datacklist_id = datacklists.id 28 LEFT JOIN az_dal2s ON az_dal2s.id = dal_list2s.ms_azdal2 29WHERE 30 datacklists.id = '2' 31GROUP BY 32 datacklists.id 33LIMIT

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

joinを複数回繋ぐと普通に起きる問題ですから
正規化についてすこし学習されるとよいでしょう

サブクエリなどでgroup_concatする項目を意識して先に整理し
あとからjoinで情報を追加するような対応になると思いますが
最初から広げすぎなのでもう少し簡単なサンプルをつかって
ご自身でいろいろ試してみたほうがよろしいかと

投稿2017/02/24 00:51

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/02/24 04:33

助言ありがとうございます。 yambejp様でしたら >>>サブクエリなどでgroup_concatする項目を意識して先に整理 はどのように書きますでしょうか? 教えていただけると幸いです。 よろしくお願いいたします。
yambejp

2017/02/24 05:44 編集

例示のSQL文だけでは判断つきませんがたぶん dal_list1sとaz_dal1sの組み合わせでgroup_concat dal_list2sとaz_dal2sの組み合わせでgroup_concat した上で、それぞれをサブクエリとしてdatacklistsにjoinする ことになるでしょうね 逆にあまり難しいことを考えずに、たんにgroup_concat内の ダブリを取りたいだけであれば、group_concat内でdistinct処理が 可能です。マニュアルを確認してください https://dev.mysql.com/doc/refman/5.6/ja/group-by-functions.html#function_group-concat
ssk

2017/02/24 05:42

ありがとうございます。 ひとまず、distinctで対応できそうです。 yambejp様のおっしゃる通り、group_concatと正規化についてもう少し勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問