2

我需要一些关于 SQL 查询的帮助,我对此有点生疏。我使用的 Wordpress 数据库是这样设置的。

post_id, meta_key, meta_value
33, opt_in, 1
33, email, john@hotmail.com

我如何收集选择加入值为“1”的所有电子邮件地址,post_id 与两行匹配。我看过sql union,这是我得到的最接近的。

SELECT post_id
FROM wp_postmeta
WHERE meta_key='opt_in' AND meta_value='1'
UNION
SELECT meta_value
FROM wp_postmeta
WHERE meta_key='email'
4

3 回答 3

2

你可以用 JOIN 做到这一点

SELECT p2.meta_value email
  FROM wp_postmeta p1 JOIN wp_postmeta p2
    ON p1.post_id = p2.post_id
   AND p1.meta_key = 'opt_in'
   AND p2.meta_key = 'email'
 WHERE p1.meta_value = 1

如果你有

| POST_ID | META_KEY | META_VALUE |
|---------|---------|---------|
| 33 | 选择加入 | 1 |
| 33 | 电子邮件 | john@hotmail.com |
| 34 | 选择加入 | 0 |
| 34 | 电子邮件 | helen@hotmail.com |
| 35 | 选择加入 | 1 |
| 35 | 电子邮件 | 马克@hotmail.com |

查询输出将是:

| 电子邮件 |
|-----------------|
| john@hotmail.com |
| 马克@hotmail.com |

这是SQLFiddle演示

于 2013-09-16T09:52:50.940 回答
1

我认为你需要的是meta_value领域,而不是post_id

SELECT meta_value 
FROM wp_postmeta
WHERE meta_key = 'email' AND
      post_id = (SELECT post_id 
                 FROM wp_postmeta 
                 WHERE meta_key = 'opt_in' AND
                       meta_value = 1)
于 2013-09-16T09:50:33.493 回答
1
select meta_value 
from wp_postmeta w1
where meta_key = 'email'
and exists (select 1 from wp_postmeta w2 where w1.post_id = w2.post_id and w2.meta_key = 'opt_in' and meta_value = 1)

或者

select w1.meta_value 
from wp_postmeta w1
inner join wp_postmeta w2 on w1.post_id = w2.post_id
and w1.meta_key = 'email' 
and w2.meta_key = 'opt_in' and w2.meta_value = 1
于 2013-09-16T09:50:50.110 回答