以下是我在Magento 2.0 mySQL資料庫中更新一個產品的定價和更新日期欄位的查詢。
SET @etype = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product')。)
SET @price = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'price' AND entity_type_id = @etype)。)
--管理商店的ID。
SET @store = 0;
UPDATE catalog_product_entity_decimal d1
-- SELECT d1.row_id, d1.value AS 'Current', ip.sku, ip.price AS 'Uped', e.uped_at FROM catalog_product_entity_decimal d1
JOIN (SELECT MAX(row_id) as rowid, sku, updated_at FROM catalog_product_entity GROUP BY entity_id) e ON (d1. row_id = e.rowid)
JOIN import_price ip ON e.sku = ip.sku
AND d1.store_id = @store
and d1.attribute_id= @price
SET d1.value = ip.price, e.uped_at = NOW()
我得到的錯誤是UPDATE的目標表e是不可更新的
。我知道為什么會出現這個錯誤,但是我不知道如何解決。
如果我洗掉, e.uped_at = NOW(),查詢就能正常作業。
下面是表的結構
CREATE TABLE prod23.catalog_product_entity (
row_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Version Id',
entity_id int(10) UNSIGNED NOT NULL COMMENT '物體Id',
created_in bigint(20) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Update Id',
updated_in bigint(20) UNSIGNED NOT NULL DEFAULT 2147483647 COMMENT 'Next Update Id',
attribute_set_id smallint(5) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Attribute Set ID'/span>,
type_id varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
sku varchar(64) DEFAULT NULL COMMENT 'SKU',
has_options smallint(6) Not NULL DEFAULT 0 COMMENT 'Has Options'/span>,
required_options smallint(5) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'required Options',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation Time'。
updated_at timestamp NOT NULL DefAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
PRIMARY KEY (row_id)
)
uj5u.com熱心網友回復:
我假設你的目標是只更新catalog_product_entity中對每個entity_id具有最大rowid的記錄,而不去管其他的記錄。
UPDATE catalog_product_entity_decimal d1
JOIN catalog_product_entity e ON d1.row_id = e.row_id
LEFT OUTER JOIN catalog_product_entity e2
ON e2.entity_id = e.entity_id AND e2.row_id >/span> e.row_id
JOIN import_price ip ON e.sku = ip.sku
AND d1.store_id = @store
and d1.attribute_id= @price
SET d1.value = ip.price, e.uped_at = NOW()
WHERE e2.row_id IS NULL;
連接到e2的目的是找到另一條具有相同entity_id但更大的row_id的記錄。條件WHERE e2.row_id IS NULL意味著我們只想找到沒有比e的row_id大的e行的情況。這自然意味著e是對其各自的entity_id而言具有最大row_id的行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331369.html
標籤:
