[英]Inserting data from one table to another?
我有两个表,试图在其中插入数据,我已经找到了一些如何在网络上完成此操作的示例,问题是这些示例主要依赖于相同的表结构两者之间...您会看到我正在尝试将一个表中的某些数据插入结构完全不同的另一表中。
我正在尝试将数据从“ 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,但是我不是100%肯定(抱歉,我对MySQL有点新手)
有人能指出我正确的方向吗? 有什么办法可以在插入某些列的静态值的同时从媒体表中插入一些数据? (我希望这一切都说得通)
查询语法可以。
但是, 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_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;
如果执行成功,并且
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
的实体类型ID与属性ID不相关。 在Magento中,这些都是紧密相连的事物。 在表中放置错误的实体类型ID可能会使Magento行为不正确,或者根本不会注意到您的更改。 尝试这个
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 )
假设catalog_product_entity_varchar
表中的valued_id
是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;
请注意, catalog_product_entity_varchar
表中没有attribute_id
列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.