【问题标题】:How to write MYSQL query for user hierarchy relationship?如何编写用户层次关系的MYSQL查询?
【发布时间】:2015-06-21 06:17:28
【问题描述】:

我有用户表。

  • id - 主键
  • user_id - 外键(用户 ID)
  • 姓名
  • 用户名
  • 电子邮件
  • 密码

表关系

  • 超级管理员
    • 管理员1
      • 经理1
        • 业务员1
          • 客户1
          • 客户2
        • 业务员2
          • 客户3
          • 客户4
      • 经理2
        • 业务员3
          • 客户5
          • 客户6
        • 业务员4
          • 客户7
          • custom8

[问题] 当经理登录后,会向经理下的所有用户显示销售人员和客户。

当管理员登录后,所有经理、销售员和客户都将可见。

这对所有用户都是一样的。如果用户下有用户,他/她可以看到所有用户列表。

所以我需要帮助来编写这种类型的 sql 查询。

我是这样写的——

SELECT t1.id, t1.group_id, t1.name AS superadmin, t2.name as admin, t3.name as manager, t4.name as salesman, t5.name as customer FROM users AS t1 LEFT JOIN users AS t2 ON t2.user_id = t1.id LEFT JOIN users AS t3 ON t3.user_id = t2.id LEFT JOIN users AS t4 ON t4.user_id = t3.id LEFT JOIN users AS t5 ON t5.user_id = t4.id where t3.id = 15

我希望这会动态发生。

【问题讨论】:

  • 这是一个很大的话题,并不容易。用户层次系统需要非常强大的算法。我在一个开源项目上实现过,大家可以下载查看代码sqcrm.com
  • 我认为您可能必须再包含两列(usertype ,parent_id)来管理层次结构。
  • 还可以考虑在查询中获取原始数据并使用 PHP 滚动数据以对其进行排序。
  • 我有另一个名为 user_group 的表。它有用户类型。 parent_id 是 user_id

标签: php mysql join


【解决方案1】:

您可以在用户表中添加role 列。然后,假设您将登录用户的所有数据保存在 SESSION 中,您可以

SELECT * FROM users WHERE role < '$_SESSION[role]' AND .....

此外,您可以让父角色为每个角色使用进一步的层次结构。

【讨论】:

  • 我有一个单独的角色表,我将它加入到这个表中。但我没有得到儿童用户的价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多