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

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

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

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

Q&A

0回答

1229閲覧

cakephp3でサブクエリを使用する結合を作成する方法について知りたい

hgleam

総合スコア26

CakePHP

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

0グッド

0クリップ

投稿2021/06/14 12:18

編集2021/06/15 00:39

実現したいこと

1申込を1行として、その1行の1カラムに複数商品を登録した順番で表示したい
出力したいイメージは以下

■出力したい形式
|申込番号|商品|店舗|
|:--|:--:|
|申込1|商品A/商品C/商品B | 店舗1
|申込2|商品C/商品B/商品A | 店舗2

■SQL(Postgres)

SELECT 申込.ID,商品名, 店舗.店舗名 FROM INNER JOIN ( SELECT 申込詳細.id, (ARRAY_TO_STRING(ARRAY_AGG(商品.名前), ' / ')) AS 商品名, 店舗.名前 FROM ( SELECT 申込詳細.*, 商品.* FROM 申込詳細 INNER JOIN 商品 ON 申込詳細.商品ID = 商品.id ORDER BY 申込詳細.id ASC ) AS 申込商品 INNER JOIN 店舗 ON 申込商品.店舗ID = 店舗.id GROUP BY 申込商品.id, 商品.名前 ) INNER JOIN 申込 ON 申込.ID = 申込商品.申込ID

分からないこと

申込詳細と商品を結合したテーブルにエイリアスをつける方法。
結合した際に一度申込詳細.idの昇順で並び替えているのは、商品と結合した段階で
申込時に登録した商品の順番ではなく、商品IDで連結されてしまうため

試していること

■試行錯誤中のクエリ
A:申込詳細
B:商品
C:店舗

$query = $this->A->find(); $query->select([ 'A__id' => 'A.id', 'B__names' => $query->newExpr()->add("ARRAY_TO_STRING(ARRAY_AGG(\"B\".\"name\"), ' / ')"), 'C__name' => 'C.name', ]); $query->join( [ 'B' => [ 'table' => 'b', 'type' => 'INNER', 'conditions' => [ 'A.product_id' => new IdentifierExpression('C.id'), ], ], ] ); $query->join( [ 'C' => [ 'table' => 'c', 'type' => 'INNER', 'conditions' => [ 'B.shop_id' => new IdentifierExpression('C.id'), ], ], ] ); $query->group(['A.id', 'C.name']);

まとめ

こちらに関して、解決方法をご存知の方いらっしゃいましたらアドバイス頂けますと幸いです。

更新(2021/06/15)

クエリにエイリアスを設定する方法は相変わらず分かっておりませんが、実現したかった表示順に関しては、
以下で解決しました。

(ARRAY_TO_STRING(ARRAY_AGG(商品.名前) ORDER BY 申込詳細.ID, ' / ')) AS 商品名,

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問