只有当元值#2和元密钥#2存在时,才为元密钥#1设置元值#1


Set Meta Value #1 for Meta Key #1 Only When Meta Value #2 and Meta Key #2 is Present

我需要更新我的WordPress数据库,但是当考虑到次要条件时,我一直遇到障碍。

在非常简单的术语中,我有一个meta_key = 'flowers'需要一个meta_value = 'roses'仅在meta_key = 'month'meta_value = 'august'的地方设置。

我没能写出一个包含第二个条件的成功的MySQL查询。我知道怎么做:

update wp_postmeta
  set meta_value = 'roses'
where meta_key = 'flowers'

但不限于meta_key = 'month'meta_value = 'august'

任何帮助都将非常感激!提前谢谢。

更新# 1:

应@Strawberry的要求,进一步详细说明我的问题。我不完全确定如何,但meta_key = 'flowers'和meta_key = 'month'必须相关。目前,所有帖子都由一个meta_key = 'flowers'和一个meta_key = 'month'组成。

更新# 2:

我得到了@Rahul的帮助,这是适合我的版本:

UPDATE wp_postmeta a
JOIN wp_postmeta b ON a.post_id = b.post_id AND 
                      b.meta_key = 'month' AND 
                      b.meta_value = 'august'
  SET    a.meta_value = 'roses'
WHERE  a.meta_key = 'flowers';

希望它也能帮助到其他人。另外,有关JOIN的更多详细信息,请参见:如何在UPDATE查询中执行3表JOIN ?

谢谢大家!

exists操作符应该完成这项工作:

UPDATE wp_postmeta a
SET    a.meta_value = 'roses'
WHERE  a.meta_key = 'flowers' AND
       EXISTS (SELECT *
               FROM   wp_postmeta b
               WHERE  a.post_id = b.post_id AND 
                      b.meta_key = 'month' AND 
                      b.meta_value = 'august')