MySQL har speciel funktionalitet i denne situation. Det hedder INSERT...ON DUPLICATE KEY UPDATE
. Det, den gør, er, at den forsøger at INSERT
en post, men hvis den allerede eksisterer, vil den bare UPDATE
det. '
For at få denne funktionalitet til at fungere, skal du have en UNIQUE
begrænsning på bordet. Baseret på dit eksempel kan jeg se, at du tjekker de to kolonner for deres eksistens. Hvis du allerede har en PRIMARY KEY
, du kan bare tilføje en UNIQUE
begrænsning på begge kolonner.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Når det er blevet udført, kan du nu bruge 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