MySQL има специална функционалност в тази ситуация. Нарича се INSERT...ON DUPLICATE KEY UPDATE
. Това, което прави, е, че се опитва да INSERT
запис, но ако вече съществува, той просто ще UPDATE
то. '
За да работи тази функционалност, трябва да имате UNIQUE
ограничение на масата. Въз основа на вашия пример виждам, че проверявате двете колони за неговото съществуване. Ако вече имате PRIMARY KEY
, можете просто да добавите UNIQUE
ограничение за двете колони.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
След като бъде изпълнено, вече можете да използвате INSERT..ON DUPLICATE KEY UPDATE
INSERT INTO oc_product_attribute (PRODUCT_ID, ATTRIBUTE_ID, OtherCol, TEXT)
SELECT MAX(PRODUCT_ID), MAX(ATTRIBUTE_ID), 1, 'XYZ'
FROM
(
SELECT PRODUCT_ID, NULL ATTRIBUTE_ID
FROM oc_product_description
WHERE NAME = 'PRODUCT_NAME_HERE'
UNION ALL
SELECT NULL PRODUCT_ID, ATTRIBUTE_ID
FROM oc_attribute_description
WHERE NAME='ATTRIBUTE_NAME_HERE'
) x
ON DUPLICATE KEY UPDATE TEXT = 'ABC'
-- change OtherCol to the name of your column which you want to insert 1