【问题标题】:Update 'meta_value' from wp_usermeta table assigning value of another 'meta_value' of the same table从 wp_usermeta 表更新 'meta_value' 分配同一个表的另一个 'meta_value' 的值
【发布时间】:2015-10-28 18:07:38
【问题描述】:

对于令人困惑和繁琐的问题,我深表歉意,但无论如何我需要执行以下操作:在“wp_usermeta”表中,我有所有用户的字段(meta_keys)“类别”和“请求类别”。现在我想用 meta_value 'request_category' 覆盖 'category' 的 meta_value,其中 'category' 具有特定值。

但在执行 SQL 查询后,我在“类别”的“元值”字段中得到 NULL。这是我的代码:

UPDATE 
  wp_usermeta
SET
  wp_usermeta.meta_value = 
  (SELECT 
    umeta_tmp.meta_value 
  FROM
    umeta_tmp
  WHERE umeta_tmp.meta_key = 'request_category' 
    AND umeta_tmp.umeta_id = wp_usermeta.umeta_id) 
WHERE wp_usermeta.meta_key = 'category' 
  AND wp_usermeta.meta_value = 'travel_agency'    

表 'umeta_tmp' 是一个临时表,我在其中保存了 'wp_usermeta' 表的数据(因为我无法修改我在 SELECT 部分中使用的同一个表)。

谁能提示我如何做到这一点。 谢谢。

【问题讨论】:

  • 像 update_user_meta 这样的东西会不会为此工作?
  • 是的,我可以把它作为最后的手段。

标签: mysql sql wordpress select subquery


【解决方案1】:

使用 JOIN 转换为 UPDATE

UPDATE wp_usermeta
JOIN umeta_tmp ON umeta_tmp.meta_key = 'request_category' 
               AND umeta_tmp.umeta_id = wp_usermeta.umeta_id
SET wp_usermeta.meta_value = umeta_tmp.meta_value
WHERE wp_usermeta.meta_key = 'category' AND 
      wp_usermeta.meta_value = 'travel_agency'`

如果umeta_tmp 表只是wp_usermeta 表的副本,那么JOINWHERE 条件是矛盾的,因为您想要同一行的meta_key 字段(由id 均衡)在umeta_tmp 表中为'request_category',同时在wp_usermeta 中为'category'。 考虑到这一点并将WHERE 条件移动到JOIN 中,结果将如下:

UPDATE wp_usermeta
JOIN umeta_tmp ON wp_usermeta.meta_key = 'category' AND 
               wp_usermeta.meta_value = 'travel_agency' AND
               umeta_tmp.umeta_id = wp_usermeta.umeta_id
SET wp_usermeta.meta_value = umeta_tmp.meta_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2012-08-02
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2014-12-08
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多