46 lines
2.0 KiB
SQL
46 lines
2.0 KiB
SQL
-- P5-358
|
|
DROP MATERIALIZED VIEW IF EXISTS v_esales_category_count;
|
|
CREATE MATERIALIZED VIEW v_esales_category_count
|
|
AS
|
|
SELECT id, locale_id, product_id, groupid, wallpapertype_id,
|
|
CASE
|
|
WHEN blacklist_id IS NULL AND visible = 1 AND browsable = 1 THEN true
|
|
ELSE false
|
|
END AS is_visible
|
|
FROM (
|
|
SELECT p.id,
|
|
locales.id AS locale_id,
|
|
pc.product_id,
|
|
groupid,
|
|
CASE groupid
|
|
WHEN 2 THEN NULL
|
|
ELSE wallpapertype_id
|
|
END AS wallpapertype_id,
|
|
(
|
|
SELECT id
|
|
FROM product_blacklist
|
|
WHERE product_id = pc.product_id
|
|
AND language_id = SUBSTR(locales.value, 1, 2)
|
|
AND territory_id = SUBSTR(locales.value, 4)
|
|
AND (group_id = groupid OR group_id IS NULL)
|
|
) blacklist_id,
|
|
visible,
|
|
browsable
|
|
FROM categories p
|
|
JOIN categories c ON c.lft >= p.lft AND c.rgt <= p.rgt
|
|
JOIN product_category pc ON c.id = pc.category_id
|
|
JOIN (
|
|
SELECT productid,
|
|
groupid
|
|
FROM "product-printproducts"
|
|
) pp ON pc.product_id = pp.productid
|
|
JOIN (SELECT productid, visible, browsable FROM "product-products") prod ON pc.product_id = prod.productid
|
|
LEFT JOIN product_wallpapertypes pw ON pc.product_id = pw.product_id,
|
|
locales
|
|
) main
|
|
GROUP BY id, locale_id, product_id, groupid, wallpapertype_id, visible, browsable, blacklist_id;
|
|
|
|
-- DROP INDEX public.v_esales_category_count_id_idx;
|
|
CREATE UNIQUE INDEX v_esales_category_count_id_idx
|
|
ON v_esales_category_count (id, locale_id, product_id, groupid, wallpapertype_id);
|