为用户登录创建MySQL父/子关系查询

时间:2014-04-08 06:18:18

标签: mysql sql

我有一个客户数据库,我想启用父/子查看权限。

即。这就是我建立数据的方式(我不确定这是否是最好的管理方式)

id        parent_id        name
1          5                Cust 1
2          5                Cust 2
3          6                Cust 3
4          6                Cust 4
5          0                Group Head
6          5                Sub Group
7          0                Cust 5
8          0                Cust 6

因此,这种关系的直观表示是:

Group Head
 - Cust 1
 - Cust 2
 - Sub Group
   -- Cust 3
   -- Cust 4

我需要对这种关系进行2次检查(这让我意识到我认为我没有最好的结构......

  1. 首先检查,当'Group Head'或'Sub Group'登录时,我想确定它们是一个组,以便我可以向他们提供客户转换选项
  2. 我需要执行查询以返回所有客户
  3. 即。如果我以“子组”身份登录,则应仅返回Cust 3&但是,如果我以“Group Head”身份登录,它将返回Cust 1,Cust 2,Cust 3& cust 4(注意:它不包括'子组',因为它是一个组,而不是客户)

    对于第一个问题,我想我还需要另一个标识为群组的字段?这是最好的方式吗?

    对于第二个问题,我构建了这个查询,我需要扩展它以返回'子组'客户。

    SELECT c.id, 
         c.parent_id, 
         c.name, 
    FROM Customer c
    WHERE c.parent_id = '5'
    

    返回:

    id        parent_id        name
    1          5                Cust 1
    2          5                Cust 2
    6          5                Sub Group
    

    我希望结果显示:

    id parent_id name 1 5 Cust 1 2 5 Cust 2 3 6 Cust 3 4 6 Cust 4

    即。排除'子组',因为它不是客户,并告诉我任何有孩子的孩子。

    注意:如果必须,我可以安排显示子组吗?

2 个答案:

答案 0 :(得分:1)

至少引入类型列(可能是customer_type表以供参考)

所以说组头是1000,子组是1500

过滤类型小于1000的客户 所以我们可以有足够的空间来扩展

答案 1 :(得分:-1)

对我来说,孩子/父母的逻辑有点模糊,但我想你可以试试

SELECT c.id, c.parent_id, c.name, 
  FROM Customer c
 WHERE c.parent_id = '5'
   AND c.id not in (5,6)

结果如下

SELECT c.id, c.parent_id, c.name
  FROM ttest c
 WHERE c.parent_id in (5,6)
   AND c.id not in (5,6)


  ID  PARENT_ID NAME
---- ---------- ----------
   1          5 Cust 1
   2          5 Cust 2
   3          6 Cust 3
   4          6 Cust 4