你好我有一张类似这个的表:
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的所有人的名字......简单地说:
从tablename中选择*赞助商= 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,我会尝试这个“糟糕的解决方案”
选择赞助商,将(*)作为赞助商的表名下线 (从赞助商= 1的表名中选择id)按赞助商的顺序分组 下线desc
此查询的结果是
sponsor downline
---------------------
3 3
5 1
有两个问题: - 名字不是权利,不是我想要的 - 示例中的计数0“2 | John | 0”不会出现
谢谢你的建议和帮助,对不起英语, Ñ答案 0 :(得分:3)
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
如您所见,该表已连接两次。使用INNER JOIN
的第一个联接会获取与您的 user_choice Sponsor
相关联的记录。使用LEFT JOIN
的第二个联接会获取与 user_choice 中的记录相关联的所有记录。