MySQL检索用户拥有用户结果集的用户数
我有两个用户和父母表。MySQL检索用户拥有用户结果集的用户数
- 每个用户都有一个唯一的ID和一个父母ID(这是一个谁引用他到网站)。 root用户的
- 父ID为0
- 用户具有相同的父ID是该ID的儿童
用户
ID
名
电子邮件
父母
ID
parentId的
joiningAmount
我希望有一个查询中,我会给ID的父母。
此查询应返回其所有患儿以下信息
ID,姓名,电子邮件,joiningAmount,(没有儿童的这种用户)
是否有可能在一个做到这一点查询?
如果不是我应该如何规范化数据库以便在一个查询中完成此操作。
任何帮助,高度赞赏。
编辑:
用户表将包含所有的用户信息
假设这是用户表。
id name email 1 Admin [email protected] 2 John [email protected] 3 Larry [email protected] 4 Jone [email protected]
注册只能通过推荐进行。
由于管理员没有被任何人转介,他的parentId是0.
假设管理员指的是larry和john(因此他们的父母id是1)并且约翰从他的转介中带来另一个用户,他的名字是他的jone(因此他的父母身份是约翰),那么父母表应该看起来像这样。
现在作为其应用的一部分,连接数量可以忽略。
id parentId joinAmount 1 0 1000 2 1 1000 3 1 1000 4 2 1000
所以现在我想查询到,如果我通过1(管理员ID)的ID,它应该返回自己的孩子的
id, name, email, joiningAmount, (**No of Childrens this user has**) 2, John, [email protected], 1000, 1(as john has 1 child) 3, Larry, [email protected], 1000, 0
大厦由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-26 19:18:51
我建议把它逼到一个数据库,像这样
users
- id
- parent_id
- name
- email
- joiningAmount
这样,你只有一个数据库,您检索与像查询一切:
SELECT id, name, email, joiningAmount FROM users WHERE parent_id = 3
假设你不改变表的方式提出(这你应该),那么相应的查询将是:
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-26 18:06:50
你可以请提供我的SQL? – 2013-03-26 18:11:23
那两张表,我没有看到关系。 'parents'内的'parentId'有点递归,似乎并不指向'users'表 – 2013-03-26 18:17:58