mysql中的子查询计数

时间:2013-04-05 03:03:35

标签: mysql count subquery

我有以下查询,它成功地获取了我之后的数据......

$query  = @"SELECT table1.user_id, table1.col8, table2.col5, user_tokens.expiry
FROM table1 
INNER JOIN table2
ON table1.user_id=table2.user_id
INNER JOIN user_tokens
ON user_tokens.user_id=table1.user_id 
WHERE table1.col2 = '{$userName}'";

我一直在玩它,在没有第二次查询的情况下给我一些额外的数据。我想要的数据是来自另一个表的行计数 - table10(也有user_id作为列),其中user_id列匹配。

就像......

(SELECT COUNT(*) FROM table) as userDataCount

当前给我一个整个表的行数,而不仅仅是与table1具有相同user_id的行

我认为我所做的内部联接只会计算user_id列与查询的其余部分匹配的table10行,以及我尝试加入table10的不同方式,或使用额外的WHERE来表示{{失败了。

有一种简单的方法可以做到这一点,还是需要两个单独的查询?

2 个答案:

答案 0 :(得分:3)

有很多可能的解决方案,其中一个我说明了,它通过一个子查询加入,该子查询分别得到每个组的总数。

SELECT  table1.user_id, 
        table1.col8, 
        table2.col5, 
        user_tokens.expiry,
        COALESCE(b.totalDataCount, 0) userDataCount
FROM    table1 
        INNER JOIN table2
            ON table1.user_id=table2.user_id
        INNER JOIN user_tokens
            ON user_tokens.user_id=table1.user_id 
        INNER JOIN
        (
            SELECT  user_ID, COUNT(*) totalDataCount
            FROM    table10
            GROUP   BY user_ID
        ) b ON  b.user_id = table1.user_id
WHERE   table1.col2 = '{$userName}

答案 1 :(得分:1)

SELECT 
table1.user_id, 
table1.col8, 
table2.col5, 
user_tokens.expiry, 
(SELECT COUNT(*) 
    FROM table
        WHERE table.user_id=table1.user_id) as uCount 
    FROM table1 
    INNER JOIN table2
    ON table1.user_id=table2.user_id
    INNER JOIN user_tokens
    ON user_tokens.user_id=table1.user_id 
    WHERE table1.col2 = '{$userName}'";