0

我有两个表用户和父母。

  1. 每个用户都有一个唯一的 id 和一个父 id(这是将他推荐到网站的人)。
  2. root 用户的父 id 为 0。
  3. 具有相同父 ID 的用户是该 ID 的子代

用户
id
姓名
电子邮件


父母
id
parentId
加入金额

我想要一个查询,我将在其中给出父母的 id。

此查询应返回其所有子项以及以下信息

id,姓名,电子邮件,joiningAmount,(此用户拥有的孩子数

是否可以在一个查询中执行此操作?
如果不是,我应该如何规范化数据库以便在一个查询中完成此操作。
非常感谢任何帮助。

编辑:

users 表将包含所有用户信息

假设这是用户表。

身份证 姓名 电子邮件
1 管理员 admin@web.com
2 约翰·约翰@web1.com
3 拉里·拉里@web2.com
4 琼斯 Jone@web3.com

只有通过推荐才能注册。
由于管理员没有被任何人推荐,因此他的 parentId 为 0。
假设管理员引用了 larry 和 john(因此他们的父 id 为 1)并且 john 从他的推荐中带来了另一个用户,该用户的名字是他的 jone(因此他的父 id 是 john 的)然后是父母表应该是这样的。

加入金额现在可以忽略,因为它只是申请的一部分。

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

所以现在我想要一个查询,如果我传递一个 1(管理员 id)的 id,它应该返回他孩子的

id,姓名,电子邮件,joiningAmount,(**此用户拥有的孩子数**)

2, John, John@web1.com, 1000, 1(因为 john 有 1 个孩子)
3, 拉里, 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

Assuming that you don't change the tables the way suggested (which you probably should) then the appropriate query would be:

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 回答
0

我建议像这样将它放入一个数据库中

users
- id
- parent_id
- name
- email
- joiningAmount

这样,您只有一个数据库,并使用以下查询检索所有内容:

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