我有两个表用户和父母。
用户
ID
命名
电子邮件
的父母
ID
parentId的
joiningAmount
我想要一个查询,其中我将提供父母的身份。
此查询应返回包含以下信息的所有子项
ID,姓名,电子邮件,加入安装,(此用户没有儿童)
是否可以在一个查询中执行此操作?
如果不是,我应该如何规范化数据库以便在一个查询中完成此操作
任何帮助都非常感谢。
修改
users表将包含所有用户信息
假设这是用户表。
id name email 1 Admin admin@web.com 2 John John@web1.com 3 Larry Larry@web2.com 4 Jone Jone@web3.com
只能通过推荐进行注册
由于管理员不被任何人推荐,他的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
所以现在我想要一个查询,如果我传递id为1(管理员ID),它应该返回他的孩子的
id, name, email, joiningAmount, (**No of Childrens this user has**) 2, John, John@web1.com, 1000, 1(as john has 1 child) 3, Larry, Larry@web2.com, 1000, 0
答案 0 :(得分: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
答案 1 :(得分:0)
我建议将它放在一个像这样的数据库中
users
- id
- parent_id
- name
- email
- joiningAmount
这样,您只有一个数据库,并使用以下查询检索所有内容:
SELECT id, name, email, joiningAmount FROM users WHERE parent_id = 3
答案 2 :(得分: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;