MySQL har speciell funktionalitet i denna situation. Det heter INSERT...ON DUPLICATE KEY UPDATE
. Vad den gör är att den försöker INSERT
en post men om den redan finns kommer den bara att UPDATE
Det. '
För att denna funktionalitet ska fungera måste du ha en UNIQUE
begränsning på bordet. Baserat på ditt exempel kan jag se att du kontrollerar de två kolumnerna för dess existens. Om du redan har en PRIMARY KEY
, du kan bara lägga till en UNIQUE
begränsning på båda kolumnerna.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
När den väl har körts kan du nu använda 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