使用查询批量更改 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_id
是PRIMARY 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