我有以下查询,它成功地获取了我想要的数据......
$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}'";
我一直在尝试使用它来为我提供一些额外的数据而无需第二次查询。我想要的数据是来自另一个表的行计数 - 表 10(也有 user_id
作为列),其中 user_id 列匹配。
所以像...
,
(SELECT COUNT(*) FROM table) as userDataCount
目前为我提供整个表的行数,而不仅仅是与 table1 具有相同 user_id 的行数
我认为我所做的内部连接只会计算 table10 的行,其中 user_id 列与查询的其余部分匹配,以及我尝试连接 table10 的不同方式,或者使用额外的 WHERE 来表示 WHERE table10.user_id = table1.user_id
失败。
有没有一种简单的方法可以做到这一点,还是我需要两个单独的查询?
最佳答案
对此有许多可能的解决方案,其中一个我已说明,是通过子查询加入,该子查询分别获取每个组的总数。
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}
关于mysql - mysql中的子查询计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15825204/