我需要根据子集计算用户(提供的唯一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)
不知道如何进行子选择。指针欢迎。
答案 0 :(得分:0)
通过执行子查询来解决这个问题很容易(也很慢)。只需获取一组user_id
值,然后使用第二个查询搜索in
。
select distinct count(user_id), meta_key, meta_value
from wp_usermeta
where meta_key = 'front_page'
and meta_value is not null
and trim(meta_value) <> ''
and meta_value in ( 'Foo', 'Bar', 'Dragons' )
and user_id in (
-- this is the subquery that returns a set of `user_id`s that can be searched in
select user_id
from wp_usermeta
where meta_key = 'checked_in'
and meta_value = '1'
)
order by meta_value, user_id;