繁体   English   中英

将数据从一个表插入到另一个表?

[英]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表中的唯一键和外键可能存在问题,这不允许您插入数据。 此外,查询可能正在等待其他查询完成(如果您的查询只是更大场景的一部分),因此这是锁定的问题。 最有可能的是第一种情况。

当前,该问题缺少重要的细节:

  • 用于执行查询的MySQL客户端/编程代码。 因此,我们无法完整看到案例并正确再现
  • 您执行的方案。 也就是说,是否在Web请求期间在某个模块的Magento应用程序内部执行此操作。 或者您的脚本中是否还有其他查询,一些已打开的事务,其他人正在访问数据库服务器等。

基于最有可能的假设,即您只是看不到唯一/外键的实际错误,可以尝试以下查询。


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客户端或服务器或执行方案存在问题。



注意 :在您的特定情况下,您的初始查询可能有意义,但是某些问题表明您的方法可能有问题,原因是:

  1. 您正在使用直接数字作为ID。 但是对于不同的安装和Magento版本,ID是不同的。 期望使用更稳定的值,例如第二个查询中的属性代码,您应通过该值提取实际的属性ID。
  2. 您可以从存储复制数据catalog_product_entity_media_gallery ,它可以存储多个条目为同一产品,到存储catalog_product_entity_varchar ,这是只能存储一个产品流入。 这意味着您不能以这种方式复制所有数据。 您的查询可能无法反映您想要实现的目标。
  3. 插入到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_idautoincrement ,您可以执行以下操作吗?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM