MySQL có chức năng đặc biệt trong trường hợp này. Nó được gọi là INSERT...ON DUPLICATE KEY UPDATE
. Những gì nó làm là nó cố gắng INSERT
một bản ghi nhưng nếu nó đã tồn tại, nó sẽ chỉ UPDATE
nó. '
Để chức năng này hoạt động, bạn cần có UNIQUE
ràng buộc trên bàn. Dựa trên ví dụ của bạn, tôi có thể thấy rằng bạn đang kiểm tra hai cột về sự tồn tại của nó. Nếu bạn đã có PRIMARY KEY
, bạn chỉ có thể thêm một UNIQUE
ràng buộc trên cả hai cột.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Khi nó đã được thực thi, bây giờ bạn có thể sử dụng 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