You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Post_id查询自定义分类法值并使用MySQL更新表

批量更新wp_leftover_pros_temp表的Specialty字段

在WordPress站点中,已导入约100万条专业人员列表,仅70%完成索引,剩余未索引数据存入wp_leftover_pros_temp临时表。该表缺少**Specialties(专业)和Business Affiliations(商业关联)**字段,需从WordPress分类相关表中获取对应数据补全。

WordPress分类数据存储结构

分类数据分布在三个表中,结构示例如下:

1. wp_term_relationships表

object_id   term_taxonomy_id  term_order
      5705         53192          1
      5705         55596          1

2. wp_term_taxonomy表

term_taxonomy_id    term_id   taxonomy     description   parent  count
   53192               53186     hospitals                          121
   55596               55590     specialty                          57479

3. wp_terms表

term_id   name                      slug                      term_group    order
   53186     Texas Orthopedic Hospital texas-orthopedic-hospital 0             0
   55590     Physician Assistant       physician-assistant       0             0

当前问题

现有MySQL更新语句只能针对特定term_taxonomy_id更新专业值,示例如下:

UPDATE wp_leftover_pros_temp wp
JOIN wp_term_relationships wtr ON (wp.`post_id` = wtr.`object_id`)
JOIN wp_term_taxonomy wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`) 
JOIN wp_terms wt ON (wt.`term_id` = wtt.`term_id`)  
SET wp.specialty  = wt.name
WHERE wp.post_id = wtr.object_id AND wtr.term_taxonomy_id = '55596'

由于存在400余种专业,手动编写400余条更新语句效率极低,需实现按post_id匹配,批量更新所有专业人员对应的specialty字段。

解决方案

修改更新语句,通过taxonomy字段筛选专业类别的数据,无需指定具体term_taxonomy_id,即可批量完成更新:

UPDATE wp_leftover_pros_temp wp
JOIN wp_term_relationships wtr ON wp.post_id = wtr.object_id
JOIN wp_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id
JOIN wp_terms wt ON wtt.term_id = wt.term_id
SET wp.specialty = wt.name
WHERE wtt.taxonomy = 'specialty';

特殊情况处理

如果存在同一post_id对应多个专业的情况,可使用GROUP_CONCAT合并多个专业名称,语句如下:

UPDATE wp_leftover_pros_temp wp
JOIN (
    SELECT wtr.object_id, GROUP_CONCAT(wt.name SEPARATOR ', ') AS specialties
    FROM wp_term_relationships wtr
    JOIN wp_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id
    JOIN wp_terms wt ON wtt.term_id = wt.term_id
    WHERE wtt.taxonomy = 'specialty'
    GROUP BY wtr.object_id
) AS specialty_data ON wp.post_id = specialty_data.object_id
SET wp.specialty = specialty_data.specialties;

内容的提问来源于stack exchange,提问作者J.R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:50:22