mysql在另一个选择组中选择:下线有多少人?

时间:2013-10-04 16:25:18

标签: mysql select group-by

你好我有一张类似这个的表:

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”不会出现

谢谢你的建议和帮助,对不起英语, Ñ

1 个答案:

答案 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 中的记录相关联的所有记录。