【问题标题】:Count in subselection of column在列的子选择中计数
【发布时间】: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)

不知道如何进行子选择。欢迎指点。

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:

    通过执行子查询来解决这个问题很容易(而且速度很慢)。只需获取一组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;
    

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2023-01-27
      • 2019-10-02
      • 2015-11-18
      相关资源
      最近更新 更多