Привет! База: Postgres 13. Структура бд
https://www.db-fiddle.com/f/fXUsP2utgLneDKcASY3zA5/2
Пытаюсь получить данные (в идеале только с атрибутом указанным в условие where)
SELECT
p.id,
p.name,
json_agg(
json_build_object(
'id', eav_attr.id,
'name', eav_attr.name,
'text', eav_text.val,
'real', eav_real.val,
'boolean', eav_boolean.val
)
) AS characteristics,
COUNT(*) OVER() AS total
FROM product p
JOIN category c ON c.id = p.category_id
LEFT JOIN eav_entity eav_e ON eav_e.category_id = c.id
LEFT JOIN eav_attribute eav_attr ON eav_attr.id = eav_e.eav_attribute_id
LEFT JOIN eav_val_text eav_text ON eav_text.product_id = p.id
LEFT JOIN eav_val_real eav_real ON eav_real.product_id = p.id
LEFT JOIN eav_val_boolean eav_boolean ON eav_boolean.product_id = p.id
WHERE eav_text.attribute_id = 2
GROUP BY
p.id,
p.name
но получается это characteristics (последнее значение перезаписывает предыдущие значения своего типа)
[
{
"id": 1,
"name": "Описание",
"text": "свойства продукта",
"real": 100.2,
"boolean": null
},
{
"id": 2,
"name": "Свойства",
"text": "свойства продукта",
"real": 100.2,
"boolean": null
},
{
"id": 3,
"name": "Цена",
"text": "свойства продукта",
"real": 100.2,
"boolean": null
}
]
Т.е. в идеале в characteristics хотелось бы получить
[
{
"id": 2,
"name": "Свойства",
"val": "свойства продукта"
}
]
ну или хотя бы так
[
{
"id": 1,
"name": "Описание",
"text": "описание продукта",
"real": null,
"boolean": null
},
{
"id": 2,
"name": "Свойства",
"text": "свойства продукта",
"real": null,
"boolean": null
},
{
"id": 3,
"name": "Цена",
"text": null,
"real": 100.2,
"boolean": null
}
]