MYSQLの1つの属性に複数の属性がある場合、

5763 ワード

 select p.name, c.name as category, price, sizes.size from products as p join categories as c on category_id=c.id join product_size as ps on ps.product_id=p.id join sizes on ps.size_id=sizes.id where c.name="러그" group by p.name, price, size;

nameにはそれぞれpriceとsizeがあります.
priceがあれば、priceでJSON_ARRAYAGGを使ってバンドルできますが、属性が2種類あるので難しいです.
もし価格が1つしか縛られていなかったら.
JSON_ARRAYAGGに2種類(size,price)を加えると文法エラーが発生します.
サイズによる価格なので、サイズと価格を同梱しても大丈夫なので、価格を身長と価格に変えたJSON_OBJECTを使うことにしました.
JSON_OBJECT(key, value)
// 결과
{key:value}
これは結果値であるため、JSON_ARRAYAGGによってバンドルすることができる.
select p.name, JSON_ARRAYAGG(JSON_OBJECT(size,price)) as prices from product_size join sizes on size_id=sizes.id join products as p on p.id=product_id join categories as c on c.id=p.category_id where c.name='러그' group by product_id;

prismaで送信されるjsonフォーマットは次のとおりです.

属性値がkeyやvalueのようにちょうどいい距離ではなく重複している場合、JSON_ARRAYAGGを2回使用すればよい.
select p.name, JSON_ARRAYAGG(price) as prices, JSON_ARRAYAGG(size) as sizes from product_size join sizes on size_id=sizes.id join products as p on p.id=product_id join categories as c on c.id=p.category_id where c.name='러그' group by p.name