从多个表中获取数据以更新列

时间:2013-02-27 23:58:44

标签: mysql wordpress phpmyadmin

UPDATE wp_postmeta
set meta_value = 'a:1:{i:0;s:6:"Subbed";}' 
WHERE meta_key = 'episode_sdversion'

这基本上是我能够获得的。这只是意味着我想更新wp_postmeta表,并在meta_valuea:1:{i:0;s:6:"Subbed";}时将列meta_key设置为episode_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将等于post_id中的wp_postmeta列,这将成为我的第二个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 = '' ...因此,当a:1:{i:0;s:6:"Subbed";}空白时,只需将meta_value设置为meta_value = ''

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

2 个答案:

答案 0 :(得分:0)

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

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');

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

答案 1 :(得分:0)

我同意 - 你的问题很难理解。如果您可以发布表结构,示例数据和所需的输出,这将使它更容易。

但是,如果我正确理解您的要求,那么这应该是关闭的:

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 = ''