2016-06-14 80 views
2

这是我目前正在努力实现的。 我有一个用户表,我想加入自己。 因此,我查询没有ParentUserId的所有用户,并且还想要一个名为ChildrenCount的附加字段,我可以通过ParentUserId = UserId找到所有用户的计数。同一张桌子上的INNER JOIN COUNT

SELECT p.*, COUNT(*) as ChildrenCount FROM users p 
LEFT JOIN users q 
on q.userid = p.ParentUserId 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 ORDER BY p.userid DESC LIMIT 10 OFFSET 0 

我没有收到任何错误,但查询不按预期工作。我没有得到所有相关儿童的人数。 数据库是MYSQL。

+3

你有什么问题? –

+0

“我有一个用户表,我想自己加入,所以我查询没有ParentUserId的所有用户,并且还想要一个名为ChildrenCount的额外字段,我可以通过ParentUserId = UserId找到所有用户的计数。 我的查询不起作用。 –

+0

错误是什么? –

回答

3

如果我理解正确的你, 你可以使用相关查询:

SELECT p.*, 
     (SELECT count(*) FROM users s 
     WHERE s.parentUserId = p.userid) as ChildrenCount 
FROM users p 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 
ORDER BY p.userid DESC LIMIT 10 OFFSET 0 
+0

你是不是处于'过度渴望'这个人的危险中 – Strawberry

+0

当天的第一个答案,给我一个休息Zzz @Strawberry – sagi

+0

我不能说是否有评论中的讽刺,但这看起来像是解决我的一个问题。如果您通过更新链接,更加抽象地讨论这个概念,以便我们可以了解何时考虑针对其他情境的类似解决方案,您可以进一步“过度扣紧”这些奖励点。 – Anthony

0

我觉得你不需要加入,因为你没有选择子表什么:

SELECT p.*, (SELECT COUNT(*) FROM `users` q WHERE q.userid = p.ParentUserId) as ChildrenCount 
FROM `users` p 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 
ORDER BY p.userid DESC LIMIT 10 OFFSET 0