2017-09-12 13 views
0

1つ以上の関係を持つorder_productsorder_product_taxの2つのテーブルがあります。 1 order_productsはここで、複数のorder_product_taxMysqlグループbyおよび関連するテーブルを左に結合するPHP Yii2

を持つことができる私は、この結果を得ることができますどのようにこの

[ 
{ 
    "product_id":2809, 
    "product_name":"Test Product1", 
    "quantity":5, 
    "amount":500, 
    "taxes":[ 
    { 
     "tax_id":47, 
     "tax_name":"VAT", 
     "tax_amount":21.14 
    }, 
    { 
     "tax_id":48, 
     "tax_name":"CST", 
     "tax_amount":5.17 
    } 
    ] 
}, 
{ 
    "product_id":2810, 
    "product_name":"Test Product2", 
    "quantity":4, 
    "amount":200, 
    "taxes":[ 
    { 
     "tax_id":47, 
     "tax_name":"VAT", 
     "tax_amount":12.57 
    }, 
    { 
     "tax_id":48, 
     "tax_name":"CST", 
     "tax_amount":11.34 
    } 
    ] 
} 
] 

のような出力を取得する必要があります http://sqlfiddle.com/#!9/2608e

二つのテーブルのSQLフィドルのですか?

PHPとYii2を使用しています。

ご協力いただければ幸いです。

編集:Yii2モデル

OrderProduct

OrderProductTax

class OrderProductTax extends \yii\db\ActiveRecord 
{ 

    public static function tableName() 
    { 
    return 'order_product_tax'; 
    } 

    public function rules() 
    { 
    return [ 
     [['order_product_id', 'tax_id'], 'integer'], 
     [['tax_amount'], 'number'], 
     [['tax_name'], 'string', 'max' => 20], 
    ]; 
    } 

    public function attributeLabels() 
    { 
    return [ 
     'id' => 'ID', 
     'order_product_id' => 'Order Product ID', 
     'tax_id' => 'Tax ID', 
     'tax_name' => 'Tax Name', 
     'tax_amount' => 'Tax Amount', 
    ]; 
    } 
} 
+0

order_productsテーブルの外部キーとは何ですか? –

+0

@Jon Ekizあなたがテーブルフィドルを見れば、両方のテーブルの自動増分である 'id'フィールドがありますか? –

+1

これまでに試したことはありますか? –

答えて

1

ここでは、SQLです。グループ連結を使用して列をjsonに結合することができます。

SELECT amounts.* 
    ,GROUP_CONCAT(CONCAT('{tax_id:"', tax_id, '", tax_name:"',tax_name,'", tax_amount:"',tax_amount,'"}')) 
FROM 
(
SELECT op.product_id, 
op.product_name, 
SUM(op.amount) as amount, 
SUM(op.quantity) as quantity 
FROM order_product op 
group by 1,2 
)amounts 
LEFT JOIN 
(
select product_id 
,tax_id 
,tax_name 
,sum(tax_amount) as tax_amount 
from order_product op 
join ordeR_product_tax opt 
on op.id = opt.order_producT_id 
group by 1,2,3 
) taxes 
on amounts.product_id = taxes.product_id 
group by 1,2,3,4 
+0

ありがとう@Jon Ekiz –

関連する問題