0

私には2つのテーブルユーザーと親がいます。

  1. 各ユーザーには、一意のIDと親IDがあります(これは、ユーザーをWebサイトに紹介したユーザーです)。
  2. rootユーザーの親IDは0です。
  3. 同じ親IDを持つユーザーは、そのIDの子です

ユーザー
ID

メール



ID 親
IDjoiningAmount

親のIDを指定するクエリが必要です。

このクエリは、次の情報を含むすべての子を返す必要があります

id、name、email、joiningAmount、(このユーザーが持っている子の数)

1つのクエリでこれを行うことは可能ですか?
そうでない場合は、1つのクエリでこれを完了するために、データベースをどのように正規化する必要がありますか。
どんな助けでも大歓迎です。

編集:

usersテーブルには、すべてのユーザー情報が含まれます

これがusersテーブルであるとします。

ID名のメール
1管理者admin@web.com
2ジョンジョン@web1.com
3 Larry Larry@web2.com
4 Jone Jone@web3.com

登録は紹介によってのみ可能です。
adminは誰からも参照されていないため、彼のparentIdは0です。adminが
larryとjohnを参照し(したがって、それらの親IDは1)、johnが彼の紹介から別のユーザーを連れてきて、その名前が彼のjone(したがって、彼の親IDはjohnの名前)であるとします。テーブルは次のようになります。

参加額は、アプリケーションの一部であるため、現時点では無視できます。

id parentId joinAmount
1 0 1000
2 1 1000
3 1 1000
4 2 1000

だから今私は1(admins id)のIDを渡すと彼の子供たちを返すクエリが欲しいです

id、name、email、joiningAmount、(**このユーザーが持っている子の数**)

2、ジョン、John @ web1.com、1000、1(ジョンには子供が1人いるため)
3、Larry、Larry @ web2.com、1000、0
4

3 に答える 3

1

Unamata Sanataraiの回答に基づいて、次のクエリを実行します。

SELECT users.id, users.name, users.email, users.joiningAmount, 
(SELECT COUNT(*) FROM users AS children WHERE children.parent_id = users.id ) AS children_count 
FROM users WHERE users.parent_id = 3
于 2013-03-26T18:34:31.820 に答える
0

私はそれをそのようにただ1つのデータベースに置くことを提案します

users
- id
- parent_id
- name
- email
- joiningAmount

このようにすると、データベースが1つだけになり、次のようなクエリですべてを取得できます。

SELECT id, name, email, joiningAmount FROM users WHERE parent_id = 3
于 2013-03-26T18:17:05.287 に答える
0

提案された方法でテーブルを変更しないと仮定すると(おそらくそうすべきです)、適切なクエリは次のようになります。

SELECT users.id, users.name, users.email, parents.joiningAmount,
    (SELECT COUNT(*) FROM parents P WHERE P.parentId=users.id) 
FROM users,parents
WHERE users.id=parents.id;
于 2013-03-26T19:13:28.510 に答える