5

こんにちは、私はこのようなテーブルを持っています:

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 のようなスポンサーを持っている人の名前をすべて知りたいのですが... 単純に:

select * from tablename where Sponsor=MYCHOICE

しかし...ここに問題があります.この結果のダウンラインに何人いるのか.

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 を選択) グループ スポンサー順 ダウンライン DES

このクエリの結果は

sponsor  downline
---------------------
3        3
5        1

2 つの問題があります。

アドバイスと助けをありがとう、英語でごめんなさい、N.

4

1 に答える 1

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

ご覧のとおり、テーブルはそれ自体に 2 回結合されています。を使用する最初の結合は、user_choiceINNER JOINに関連付けられたレコードを取得します。を使用する 2 番目の結合は、レコードに関連付けられたすべてのレコードをuser_choiceから取得します。SponsorLEFT JOIN

于 2013-10-04T16:59:42.363 に答える