【问题标题】:Getting data from multiple tables to update a column从多个表中获取数据以更新列
【发布时间】:2013-02-27 23:58:43
【问题描述】:
UPDATE wp_postmeta
set meta_value = 'a:1:{i:0;s:6:"Subbed";}' 
WHERE meta_key = 'episode_sdversion'

这基本上是我能走多远。这只是意味着我想更新wp_postmeta 表并将meta_value 列设置为a:1:{i:0;s:6:"Subbed";}meta_keyepisode_sdversion 这很好。

这是问题所在,我想检索另一个 WHERE 子句。但要获得“WHERE”,我需要从多个表中检索信息。

从具有第一个单词“Subbed”的表 wp_terms 列 name 中,我从 term_id 列中获取 ID。所以我想这会像这样工作

SELECT term_id
FROM  `wp_terms` 
WHERE  `name` LIKE  '%Subbed %'

然后使用您刚刚在表 wp_term_relationships 中检索到的那个 term_id 值 并检查它是否等于term_taxonomy_id 列中的值,然后检查object_id WHERE term_taxonomy_id = whatever you just got from before 列中的值。 object_id 将等于 wp_postmeta 中的 post_id 列,这将是我的第二个 WHERE 子句...

所以我的最终代码看起来与此类似

UPDATE wp_postmeta
set meta_value = 'a:1:{i:0;s:6:"Subbed";}' 
WHERE meta_key = 'episode_sdversion'
AND WHERE post_id = the ID that I am trying to get from going through different tables

我也可以使用WHERE meta_value = '' ...所以只有在meta_value = '' 空白时将meta_value 设置为a:1:{i:0;s:6:"Subbed";}...

所以,如果你们对如何从其他表中获取信息并将其保存在某种变量中然后在最终查询中引用它有任何想法,那会很棒,或者组合多个查询?

【问题讨论】:

    标签: mysql wordpress phpmyadmin


    【解决方案1】:

    这是一个糟糕的方法。如果有人出现并发布了一个纯粹的联合解决方案,请使用它。另外,我几乎无法破译您使用的所有表格,以及您到底想做什么,这是我阅读您的想法的最大努力。

    UPDATE wp_postmeta
    set meta_value = 'a:1:blahblbah'
    WHERE meta_key='episode_sdversion'
      AND post_id in(SELECT post_id FROM wp_terms WHERE name like '%Subbed%');
    

    您有一个看起来需要在子查询中完成的连接,但从您的帖子中我无法判断那是什么。如果您无法从这里弄清楚,请发布有关其他表的更多信息,但它会像:

    UPDATE wp_postmeta
    set meta_value = 'a:1:blahblbah'
    WHERE meta_key='episode_sdversion'
      AND post_id in(SELECT post_id
        FROM wp_terms 
        JOIN OTHERTABLE on OTHERTABLE.PK=wp_terms.PK
        WHERE name like '%Subbed%' and OTHERTABLE.WhateverColumn='whatevervalue');
    

    鉴于信息,这是我能做的最好的事情。享受吧。

    【讨论】:

      【解决方案2】:

      我同意——你的问题很难理解。如果您可以发布您的表结构、示例数据和所需的输出,这会变得容易得多。

      但是,如果我正确理解了您的要求,那么这应该很接近:

      UPDATE wp_postmeta
      SET meta_value = 'a:1:{i:0;s:6:"Subbed";}' 
      WHERE meta_key = 'episode_sdversion' AND
          post_id IN (
             SELECT tr.object_id 
             FROM  wp_terms t
                JOIN wp_term_relationships tr ON t.term_id = tr.term_taxonomy_id 
             WHERE  t.name LIKE '%Subbed %'   
         ) AND meta_value = ''
      

      如果我的理解正确,这也可能有效:

      UPDATE wp_postmeta pm
          JOIN wp_term_relationships tr ON pm.post_id = tr.object_id
          JOIN wp_terms t ON t.term_id = tr.term_taxonomy_id 
      SET pm.meta_value = 'a:1:{i:0;s:6:"Subbed";}' 
      WHERE pm.meta_key = 'episode_sdversion'
          AND t.name LIKE '%Subbed %' 
          AND meta_value = ''
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 2017-03-22
        相关资源
        最近更新 更多