我有以下查询,它成功地获取了我之后的数据......
$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来表示{{失败了。
有一种简单的方法可以做到这一点,还是需要两个单独的查询?
答案 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}'";