MySQL检索用户没有用户结果集的用户

时间:2013-03-26 18:01:41

标签: php mysql sql database

我有两个表用户和父母。

  1. 每个用户都有一个唯一的ID和一个父ID(这是将他推荐到网站的人)。
  2. root用户的父ID为0.
  3. 具有相同父ID的用户是该ID的子女
  4. 用户
    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
    

3 个答案:

答案 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;