gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:10:10 26 4
gpt4 key购买 nike

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

我正在尝试将名为“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 客户端/编程代码。所以我们无法完整查看案例并正确重现
  • 您执行的场景。 IE。无论您是否在某些情况下在 Magento 应用程序中执行此操作Web 请求期间的模块。或者你的脚本中是否还有其他查询,一些人打开了事务,其他人访问了数据库服务器等。

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


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 版本的 ids 是不同的。预计会使用更稳定的值,例如第二个查询中的属性代码,您应该通过它提取实际的属性 id。
  2. 您可以将数据从存储 catalog_product_entity_media_gallery(可以存储同一产品的多个条目)复制到存储 catalog_product_entity_varchar(只能存储该产品的一个条目)产品。这意味着,您无法以这种方式复制所有数据。您的查询可能没有反射(reflect)您想要实现的目标。
  3. 插入到catalog_product_entity_varchar中的实体类型 ID 与属性 ID 无关。在 Magento 中,这些都是紧密相连的事物。在表中放入错误的实体类型 ID 会导致 Magento 行为不正确,或者根本不会注意到您的更改。

关于mysql - 将数据从一个表插入到另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13626028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com