MySQL a une fonctionnalité spéciale sur cette situation. Il s'appelle INSERT...ON DUPLICATE KEY UPDATE
. Ce qu'il fait, c'est qu'il essaie de INSERT
un enregistrement mais s'il existe déjà, il sera juste UPDATE
ce. '
Pour que cette fonctionnalité fonctionne, vous devez avoir un UNIQUE
contrainte sur la table. Sur la base de votre exemple, je peux voir que vous vérifiez son existence sur les deux colonnes. Si vous avez déjà une PRIMARY KEY
, vous pouvez simplement ajouter un UNIQUE
contrainte sur les deux colonnes.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Une fois exécuté, vous pouvez maintenant utiliser 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