我正在使用 MySQL COUNT() 方法来找出两个表中有多少行具有 u.id 的 uid

为此,我使用以下方法:

SELECT u.id, u.first_name, u.last_name, u.email, u.username, COUNT( q.uid ) AS  `q_count`, COUNT( a.uid ) AS `a_count`
FROM  `users` AS u
INNER JOIN `questions` AS q ON u.id = q.uid
INNER JOIN `answers` AS a ON u.id = a.uid
WHERE u.username =  'admin'

但是,当我运行上述查询时,第二个计数返回的行数与第一个计数的行数相同。我知道这是因为第一个计数返回两个,第二个也在做同样的事情,当 questions 表中有两行而 answers 表中有一行时。

请你能告诉我我哪里出错了吗?

谢谢

我收到的样本:http://d.pr/i/vcnJ

来自 answers 的示例数据:http://d.pr/i/TMkU

来自 questions 的示例数据:http://d.pr/i/tuwU

最佳答案

我相信原因是你正在做一个 JOIN,它将把结果合并成一个。请使用相同的查询,但使用 SELECT * 代替,您将看到为什么会发生这种情况。

试试这个:

SELECT u.id, u.first_name, u.last_name, u.email, u.username, COUNT( DISTINCT q.id ) AS  `q_count`, COUNT( DISTINCT a.id ) AS `a_count`
FROM  `users` AS u
INNER JOIN `questions` AS q ON u.id = q.uid
INNER JOIN `answers` AS a ON u.id = a.uid
WHERE u.username =  'admin'

关于mysql - COUNT() 返回错误的行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10372934/

10-13 06:06