0

我有两个表,我试图将数据从一个表插入另一个表,我已经能够找到一些如何在网络上完成此操作的示例,问题是这些示例主要依赖于相同的表结构在两者之间......你看我正在尝试将一些数据从一个表插入到另一个具有完全不同结构的表中。

我正在尝试将名为“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 有点陌生)

谁能指出我正确的方向?有什么方法可以在为某些列插入静态值的同时从媒体表中插入一些数据?(我希望这一切都有意义)

4

3 回答 3

1

查询语法没问题。

但是,表中的唯一键和外键可能存在问题,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_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您将数据从可以存储同一产品的多个条目的 storage 复制catalog_product_entity_varchar到只能存储该产品的一个条目的 storage 。这意味着,您不能以这种方式复制所有数据。您的查询可能无法反映您想要实现的目标。
  3. 插入到的实体类型 idcatalog_product_entity_varchar与属性 id 无关。在 Magento 中,这些是紧密相连的事物。将错误的实体类型 ID 放入表中会使 Magento 行为不正确,或者根本不会注意到您的更改。
于 2012-11-29T19:00:37.963 回答
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 )
于 2012-11-29T12:52:15.757 回答
0

假设表中的 是valued_id,你能不做以下事情吗?catalog_product_entity_varcharautoincrement

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_idcatalog_product_entity_varchar

于 2012-11-29T12:57:46.300 回答