нужна ваша помощь. У меня есть 3 таблицы
продукты | id | название | цена | .... |
product_to_category_list | id | product_id | category_id |
и «категории» | id | cat_title |
Для каждого продукта в таблице "products" может быть связано много строк в "product_to_category_list", потому что один продукт может быть связан с различными категориями одновременно.
Мне нужен запрос получить все продукты, связанные с несколькими определенными категориями + дополнительный столбец со всеми категориями для этого продукта, разделенными запятыми.
Например, Мне нужен продукт, который связан с двумя категориями (3 и 5): (product_to_category_list.category_id = 3 и product_to_category_list.category_id = 5)
select
"products"."id", "title", "manufacturer", "amount", "price",
"photo", "description", "available", "valid_until", "weight",
array_to_string(array_agg(product_to_category_list.category_id), ',') as category_id
from "products" inner join "product_to_category_list" on "products"."id" = "product_to_category_list"."product_id"
where (category_id = 5 ) and
(select
count("title") from "products" inner join "product_to_category_list" on "products"."id" = "product_to_category_list"."product_id"
where (category_id =3) ) >0
group by "products"."id"
ScreenShot 1 Он возвращает мне Почти результат, который мне нужен Но: 1) category_id содержит только значение 5 2) запрос генерирует динамически, и это может быть 3-5 категорий для одного продукта в качестве условия, и я не уверен, что 5 внутренних выборок - хорошая идея.
Я разработал другой запрос:
select p.title,p.manufacturer, p.amount,p.price,p.photo,p.description, p.available, p.valid_until,p.weight,
array_to_string(array_agg(c.category_id), ',') as cats_id
from products p
INNER JOIN product_to_category_list c ON c.product_id = p.id [[[where cats_id like "%paramCat_1%" and cats_id like "%paramCat_2%" .... ]]]]
group by p.id
Возвращает: Снимок экрана 2
И снова это почти то, что мне нужно, но я не могу используйте новый псевдоним с условием «Где и как», чтобы сравнить его с моими категориями.
Итак, как мне получить одну строку со всеми данными по продуктам и со всеми категориями из product_to_category_list.category_id, разделенными с products.id, разделенными запятыми (в дополнительном поле)
Надеюсь на вашу помощь;)