我有两个表,我正在尝试将数据从一个插入到另一个,我已经能够找到一些如何在网上完成这个的例子,问题是这些例子主要依赖于两者之间相同的表结构...你看我试图将一些表中的一些数据插入到具有完全不同结构的另一个表中。
我正在尝试将名为“catalog_product_entity_media_gallery”的表中的数据插入名为“catalog_product_entity_varchar”的表中。以下是其结构的简单描述
'catalog_product_entity_varchar'如下所示:
value_id | entity_type_id | attribute_id | store_id | entity_id | value
PK INT INT INT INT VARCHAR
'catalog_product_entity_media_gallery'表格如下所示:
value_id | attribute_id | entity_id | value
PK INT INT VARCHAR
我需要插入实体,并将catalog_product_entity_media_gallery的值列入catalog_product_entity_varchar。但是你可以看到结构完全不同。
我正在尝试使用的查询如下
USE magento_db;
INSERT INTO catalog_product_entity_varchar(entity_type_id, attribute_id, store_id, entity_id, value)
SELECT
4,
74,
0,
catalog_product_entity_media_gallery.entity_id,
catalog_product_entity_media_gallery.value
FROM catalog_product_entity_media_gallery;
我只需要来自media_gallery的entity_id和值,其他值总是相同的,我尝试使用上面这样做,但这只是挂在MySQL(没有错误)
我认为这是因为我试图从catalog_product_entity_media_gallery中选择4,74和0,但我不是百分百肯定(道歉,我对MySQL有点新手)
有人能指出我正确的方向吗?有没有办法在插入某些列的静态值时从媒体表中插入一些数据? (我希望这一切都有意义)
答案 0 :(得分:1)
查询语法没问题。
但是,catalog_product_entity_varchar
表中的唯一键和外键可能存在问题,这些键不允许您插入数据。此外,查询可能正在等待其他一些查询完成(如果您的查询只是更大方案的一部分),那么这是一个锁定问题。最可能的是第一种情况。
目前,这个问题缺乏重要的细节:
根据最可能的假设,您只是看不到使用唯一/外键的实际错误,您可以尝试以下查询。
1)唯一索引失败。
试试这个:
USE magento_db;
INSERT INTO catalog_product_entity_varchar(entity_type_id, attribute_id, store_id, entity_id, value)
SELECT
4 as etid,
74 as aid,
0 as sid,
catalog_product_entity_media_gallery.entity_id as eid,
catalog_product_entity_media_gallery.value as val
FROM
catalog_product_entity_media_gallery
GROUP BY
eid, aid, sid;
您插入非唯一条目的可能性很大,因为catalog_product_entity_media_gallery
可以为同一产品保留多个条目,而catalog_product_entity_varchar
则不能。如果上面的查询成功完成,那么问题实际上是使用唯一键。在这种情况下,您必须重新验证您想要实现的目标,因为初始目标(而不是查询本身)是错误的。
2)外键错误(不存在属性74)
尝试此操作(将ATTRIBUTE_CODE和ATTRIBUTE_ENTITY_TYPE_ID替换为您需要的值,例如'firstname'和6):
USE magento_db;
INSERT INTO catalog_product_entity_varchar(entity_type_id, attribute_id, store_id, entity_id, value)
SELECT
4 as etid,
eav_attribute.attribute_id as aid,
0 as sid,
gallery.entity_id as eid,
gallery.value as val
FROM
catalog_product_entity_media_gallery AS gallery
INNER JOIN
eav_attribute
ON
eav_attribute.attribute_code = '<ATTRIBUTE_CODE>'
AND eav_attribute.entity_type_id = <ATTRIBUTE_ENTITY_TYPE_ID>
GROUP BY
eid, aid, sid;
如果成功执行AND
catalog_product_entity_varchar
- 然后看来,74被选为您需要的属性的错误ID,因此catalog_product_entity_varchar
中的外键不允许您插入记录。catalog_product_entity_varchar
- 那么看起来你错了属性id,属性代码和实体类型。重新检查,您输入的是ATTRIBUTE_CODE和ATTRIBUTE_ENTITY_TYPE_ID。
如果两个查询仍然挂起 - 那么您的MySQL客户端或服务器或执行方案就会出现问题。
注意:您的初始查询可能在您的具体情况下有意义,但有些问题表明您的方法可能有问题,因为:
catalog_product_entity_media_gallery
中的数据复制到存储catalog_product_entity_varchar
,存储catalog_product_entity_varchar
可以存储同一产品的多个条目,而存储{{1}}只能存储该产品的一个条目。这意味着,您无法以这种方式复制所有数据。您的查询可能并不反映您希望实现的目标。答案 1 :(得分:0)
试试这个
INSERT INTO catalog_product_entity_varchar( entity_id, value)
VALUES (
SELECT entity_id, value
FROM catalog_product_entity_media_gallery
WHERE value_id = here the row id of value_id which have those values 4,74,0 )
答案 2 :(得分:0)
假设valued_id
表中的catalog_product_entity_varchar
是autoincrement
,您是否可以执行以下操作?
USE magento_db;
INSERT INTO catalog_product_entity_varchar(entity_type_id, store_id, entity_id, value)
SELECT
4,
74,
catalog_product_entity_media_gallery.entity_id,
catalog_product_entity_media_gallery.value
FROM catalog_product_entity_media_gallery;
请注意,attribute_id
表格中没有catalog_product_entity_varchar
列。