【发布时间】:2015-05-28 18:06:28
【问题描述】:
我需要根据子集计算用户数(提供的唯一 ID:user_id)。该表看起来像这样(它是一个 WordPress 用户元表)
mysql> describe wp_usermeta;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| umeta_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_id | bigint(20) unsigned | NO | MUL | 0 | |
| meta_key | varchar(255) | YES | MUL | NULL | |
| meta_value | longtext | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
现在用户在他们的用户元表中保存了一些我需要计算的设置。
mysql> select count(user_id), meta_key, meta_value
from wp_usermeta
where meta_key = 'front_page'
and ( meta_value in ( 'Foo', 'Bar', 'Dragons' ) )
group by meta_value;
+----------------+------------+-------------+
| count(user_id) | meta_key | meta_value |
+----------------+------------+-------------+
| 282 | front_page | Foo |
| 1355 | front_page | Bar |
| 536 | front_page | Dragons |
+----------------+------------+-------------+
3 rows in set (0.03 sec)
这是“预选”。现在我需要找出那些将front_page 设置为例如的用户的哪些用户。 Foo 在另一行中还有一个 meta_value 或 '1',键为 checked_in。示例:
where meta_key = 'checked_in' and meta_value = '1'
组合查询不是问题。我只是缺少值之间的“交集”:
select count(user_id), meta_key, meta_value
from wp_usermeta
where ( meta_key = 'front_page' or meta_key = 'checked_in' )
and ( meta_value in ( 'Foo', 'Bar', 'Dragons', '1' ) )
group by meta_value;
+----------------+------------+-------------+
| count(user_id) | meta_key | meta_value |
+----------------+------------+-------------+
| 3431 | checked_in | 1 |
| 282 | front_page | Foo |
| 1355 | front_page | Bar |
| 536 | front_page | Dragons |
+----------------+------------+-------------+
4 rows in set (0.08 sec)
不知道如何进行子选择。欢迎指点。
【问题讨论】: