MYSQL 하나의 속성에 여러가지의 속성이 붙을때
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
이용해 묶어줄 수 있지만 속성이 두가지라 어려웠다.
price 하나만 묶었을 경우
JSON_ARRAYAGG
안에 두 가지(size, price)를 넣는다면 문법 오류가 난다.
사이즈에 따른 가격이라 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
를 두 번 사용하면 된다.
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
Author And Source
이 문제에 관하여(MYSQL 하나의 속성에 여러가지의 속성이 붙을때), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wjdghks963/MYSQL-하나의-속성에-여러가지의-속성이-붙을때저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)