为了向您提供上下文,此问题存在于WordPress网站中,但与WP无关。
我实际上是在尝试更改绑定在一起的两个表中的值。
表#1是wp_term_taxonomy
(特此TT
),其中包含以下列:
term_taxonomy_id | term_id |分类|描述|父
以下语句正确更新TT.taxonomy
和TT.parent
。
UPDATE wp_term_taxonomy TT
SET
TT.taxonomy='industry',
TT.parent=0
WHERE TT.taxonomy='project_categories'
AND TT.parent=276;
这会将taxonomy
列更改为以前在特定父级下的任何内容的新值。
我需要做的是改变另一个与这个有关系的表。
它被称为wp_icl_translations
(特此ICL
),并且包含以下列:
translation_id | element_type | element_id | ...
这些表之间有两个交叉点:
TT.term_id
是与ICL.element_id
TT.taxonomy
是与ICL.element_type
的交集,其中ICL.element_type
的值也以tax_
为前缀。我的期望是以下声明会更新:
TT.parent
TT.taxonomy
ICL.element_type
这是我尝试过的SQL语句
UPDATE wp_term_taxonomy TT, wp_icl_translations ICL
SET
TT.taxonomy='industry',
TT.parent=0,
ICL.element_type = 'tax_industry'
WHERE TT.taxonomy='project_categories'
AND TT.parent=276
AND ICL.element_id=TT.term_taxonomy_id
AND ICL.element_type='tax_project_categories';
我需要在where语句中检查ICL.element_id
和ICL.element_type
,因为不同的element_id
可能会有重复的element_type
个条目。
答案 0 :(得分:1)
我认为这样可行。
UPDATE .wp_term_taxonomy TT
INNER JOIN .wp_icl_translations ICL ON ICL.element_id = TT.term_id
AND ICL.element_type='tax_project_categories'
SET
TT.taxonomy='industry',
TT.parent=0,
ICL.element_type = 'tax_industry'
WHERE TT.taxonomy='project_categories'
AND TT.parent=276
答案 1 :(得分:1)
(正如我在你的问题评论中指出的那样,我不确定你在问什么问题。我只是猜测。)
听起来你想要一个像这样的连接谓词:
ICL.element_type = CONCAT('tax_',TT.taxonomy)
如果要更新TT
中的行,即使ICL
中没有匹配的行,也可以使用外连接。 (如果情况并非如此,如果TT
中存在匹配的行,您只想更新ICL
中的行,只需删除LEFT
关键字。)
例如:
UPDATE wp_term_taxonomy TT
LEFT
JOIN wp_icl_translations ICL
ON ICL.element_type = CONCAT('tax_',TT.taxonomy)
AND ICL.element_id = TT.term_id
SET TT.parent = 0
, TT.taxonomy = 'industry'
, ICL.element_type = CONCAT('tax_','industry')
WHERE TT.taxonomy = 'project_categories'
AND TT.parent = 276