mysql select in another select group:下线有多少人?
Posted
技术标签:
【中文标题】mysql select in another select group:下线有多少人?【英文标题】:mysql select in another select group: how many people in downline? 【发布时间】:2013-10-11 17:55:55 【问题描述】:你好,我有一张类似这张的桌子:
id sponsor name
------------------------
1 0 Sasha
2 1 John
3 1 Walter
4 3 Ashley
5 1 Mark
6 4 Alexa
7 3 Robert
8 3 Frank
9 4 Marika
10 5 Philip
11 9 Elizabeth
当我选择一个 ID(称为 MYCHOICE)时,我想知道所有拥有像 MYCHOICE 这样的赞助商的人的姓名......很简单:
从表名中选择 *,其中赞助商=MYCHOICE
但是...这是问题所在...我会知道有多少人在这个结果的下线...所以...有多少记录与赞助商一样每个 id。
如果我选择 id 1 结果应该是
id name downline
----------------------
2 John 0 (noone with sponsor=2)
3 Walter 3 (3 with sponsor=3: ashley, robert, frank)
5 Mark 1 (1 with sponsor=5: philip)
如果我选择 id 4 结果应该是
id name downline
----------------------
6 Alexa 0
9 Marika 1 (1 with sponsor=9: Elizabeth)
如果 mychoice 是 1,我会尝试这个“糟糕的解决方案”
从赞助商所在的表名中选择赞助商,计数(*)作为下线 (从表名中选择 ID,其中赞助商 = 1)按赞助商顺序分组 下线描述
这个查询的结果是
sponsor downline
---------------------
3 3
5 1
有两个问题: - 名字不是权利,不是我想要的 - 示例中的计数 0 "2|John|0" 不出现
感谢您的建议和帮助,英语很抱歉, N.
【问题讨论】:
你应该使用左外连接来做到这一点 【参考方案1】:SELECT child.id,
child.name,
COUNT(grandchild.sponsor) downline
FROM TableName child
INNER JOIN TableName parent
ON child.sponsor = parent.id AND
parent.id = ? -- << user choice
LEFT JOIN TableName grandchild
ON child.id = grandchild.sponsor
GROUP BY child.id, child.name
SQLFiddle Demo
如您所见,该表与自身连接了两次。第一个使用INNER JOIN
的连接获取与Sponsor
关联的记录,这是您的user_choice。使用LEFT JOIN
的第二个联接从您的user_choice 中获取与记录关联的所有记录。
【讨论】:
天哪,你真是个天才!伟大的!其作品! 10Q 用户 #491243 :)) 我很高兴 tnx 再次以上是关于mysql select in another select group:下线有多少人?的主要内容,如果未能解决你的问题,请参考以下文章
Zuora's IPO is another step in golden age of enterprise SaaS