使用查询批量更改 WooCommerce 产品类别?

Posted

技术标签:

【中文标题】使用查询批量更改 WooCommerce 产品类别?【英文标题】:Bulk change WooCommerce products category with query? 【发布时间】:2022-01-20 06:17:26 【问题描述】:

首先,我的mysql知识基本就是一句话。 - 这是关于网站数据库的。 现在的情况和我到目前为止所做的事情。 导入出错后,我在错误的父类别中有大约 50k 产品。孩子没问题,存在正确的父母并且有一些产品。手动尝试,插件,批量编辑插件不起作用或非常慢/不可能。 我到了应该编辑表 wp_term_relationships 的地步 通过阅读和复制粘贴和少量编辑,我尝试了以下查询:

UPDATE wp_term_relationships 
SET term_taxonomy_id=2
WHERE term_taxonomy_id=1

UPDATE wp_term_relationships
SET term_taxonomy_id = 
REPLACE (term_taxonomy_id, '1','2')

UPDATE `wp_term_relationships` 
SET `term_taxonomy_id` = 
REPLACE ( term_taxonomy_id, '1', '2' ) 
WHERE `term_taxonomy_id` = '1'

UPDATE wp_term_relationships 
SET term_taxonomy_id = 1 
WHERE term_taxonomy_id = 2

1 是旧/错误类别的 ID 2 是新的/正确类别的 ID

备份还原后,一切都在不同的尝试中完成。

模拟正常并计算正确的数量 尽管我总是得到 #1062 - 键 'PRIMARY' 的重复条目 '18371-855'

任何关于如何解决这个问题的想法将不胜感激

补充说明。 这些是表中的列

object_id - 主要

term_taxonomy_id - 主要 - 索引

term_order

【问题讨论】:

【参考方案1】:

REPLACE() 用于字符串:

REPLACE (term_taxonomy_id, '1','2')

会将 1 更改为 2、11、22、10178 更改为 20278 等。如果您已经这样做了,那么您已经无法修复地损坏了数据。

这个:

UPDATE wp_term_relationships 
SET term_taxonomy_id=2
WHERE term_taxonomy_id=1

更新一行,将term_taxonomy_id 从 1 更改为 2。但是...

由于term_taxonomy_idPRIMARY KEY,因此它被声明为“唯一”。也就是说,如果你已经有一行 term_taxonomy_id = 1 就会发生冲突。

我不知道分类是什么,但我怀疑它与父母或孩子有什么关系。

弄清楚“父”列是什么并合作

UPDATE ... 
SET parent_id=2
WHERE parent_id=1

如果这是一个分层数据库,则没有具有多对多关系的单独表。所以,再一次,我们中的一个人很困惑。

【讨论】:

非常感谢您的解释。显然,这是因为一种产品可以属于多个类别。我找到了解决方案,就是忽略这个问题。:) UPDATE IGNORE wp_term_relationships SET term_taxonomy_id = 2 WHERE term_taxonomy_id = 1 @LachezarYordanov - 我担心IGNORE 隐藏了另一个问题。请提供SHOW CREATE TABLE,以便我们查看term_taxonomy_id 是否声明为UNIQUE

以上是关于使用查询批量更改 WooCommerce 产品类别?的主要内容,如果未能解决你的问题,请参考以下文章

从 WooCommerce 中的类别价格后缀更改中排除特定产品 ID

如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品

如何更改特定 WooCommerce 类别的背景颜色?

在 Woocommerce 中以编程方式添加新产品类别

从 WooCommerce 中的相关产品中排除产品类别

如何在woocommerce中获取特定类别的所有产品?