consumer模块完成95%,在和商家端对接聊天购物闭环
This commit is contained in:
52
sql/fix_shop_product_counts.sql
Normal file
52
sql/fix_shop_product_counts.sql
Normal file
@@ -0,0 +1,52 @@
|
||||
-- 1. Immediate Fix: Update all shop counts based on existing products
|
||||
-- Recalculate based on merchant_id link
|
||||
UPDATE public.ml_shops s
|
||||
SET product_count = (
|
||||
SELECT count(*)
|
||||
FROM public.ml_products p
|
||||
WHERE p.merchant_id = s.merchant_id
|
||||
AND p.status = 1
|
||||
);
|
||||
|
||||
-- 2. Permanent Fix: Create a Trigger to keep it updated automatically
|
||||
-- This ensures when you add/remove products in the future, the shop count updates
|
||||
|
||||
CREATE OR REPLACE FUNCTION public.update_shop_product_count_trigger()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
-- Update count for the merchant associated with the NEW product (on Insert/Update)
|
||||
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
|
||||
UPDATE public.ml_shops
|
||||
SET product_count = (
|
||||
SELECT count(*)
|
||||
FROM public.ml_products
|
||||
WHERE merchant_id = NEW.merchant_id
|
||||
AND status = 1
|
||||
)
|
||||
WHERE merchant_id = NEW.merchant_id;
|
||||
END IF;
|
||||
|
||||
-- Update count for the merchant associated with the OLD product (on Delete/Update)
|
||||
IF (TG_OP = 'DELETE' OR (TG_OP = 'UPDATE' AND OLD.merchant_id IS DISTINCT FROM NEW.merchant_id)) THEN
|
||||
UPDATE public.ml_shops
|
||||
SET product_count = (
|
||||
SELECT count(*)
|
||||
FROM public.ml_products
|
||||
WHERE merchant_id = OLD.merchant_id
|
||||
AND status = 1
|
||||
)
|
||||
WHERE merchant_id = OLD.merchant_id;
|
||||
END IF;
|
||||
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Drop trigger if exists to avoid error on multiple runs
|
||||
DROP TRIGGER IF EXISTS on_product_change_update_shop_count ON public.ml_products;
|
||||
|
||||
-- Create the trigger
|
||||
CREATE TRIGGER on_product_change_update_shop_count
|
||||
AFTER INSERT OR UPDATE OR DELETE ON public.ml_products
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION public.update_shop_product_count_trigger();
|
||||
Reference in New Issue
Block a user