This commit is contained in:
2026-05-06 23:19:35 +02:00
parent 34e6b6373f
commit b1b5e416ba
16 changed files with 1448 additions and 65 deletions

View File

@@ -0,0 +1,35 @@
-- Migracja: UNIQUE KEY na (client_id, offer_id) w tabeli `products`.
-- Cel: zapobiec ponownemu powstaniu duplikatow tego samego produktu (ten sam offer_id u tego samego klienta) wstawianych przez rozne sciezki importu (Cron sync z Google Ads, XmlFeedImporter, Api, Allegro).
-- Wymaga: wczesniejszego scalenia historycznych duplikatow (zob. tmp/merge_duplicate_products.php). Bez tego ALTER zwroci blad 1062.
-- Idempotentnosc: warunek przez INFORMATION_SCHEMA.
-- 1. Usun istniejacy NON-UNIQUE indeks `idx_products_client_offer` zeby zwolnic nazwe i nie trzymac dwoch indeksow na tej samej parze kolumn.
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND INDEX_NAME = 'idx_products_client_offer'
AND NON_UNIQUE = 1
),
'ALTER TABLE `products` DROP INDEX `idx_products_client_offer`',
'DO 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2. Dodaj UNIQUE KEY (client_id, offer_id). Pomijamy gdy juz istnieje indeks o tej nazwie.
SET @sql = IF(
EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'products'
AND INDEX_NAME = 'uk_products_client_offer'
),
'DO 1',
'ALTER TABLE `products` ADD UNIQUE KEY `uk_products_client_offer` (`client_id`, `offer_id`)'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;