MySQL ha funzionalità speciali in questa situazione. Si chiama INSERT...ON DUPLICATE KEY UPDATE
. Quello che fa è provare a INSERT
un record ma se esiste già, sarà solo UPDATE
esso. '
Per far funzionare questa funzionalità, devi avere un UNIQUE
vincolo sul tavolo. Sulla base del tuo esempio, posso vedere che stai controllando le due colonne per verificarne l'esistenza. Se hai già una PRIMARY KEY
, puoi semplicemente aggiungere un UNIQUE
vincolo su entrambe le colonne.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Una volta eseguito, ora puoi usare 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