【问题标题】:Is there a fast way in SQL/PHP to get all users with all branches permission?SQL/PHP 中是否有一种快速方法可以让所有用户拥有所有分支权限?
【发布时间】:2020-02-27 02:07:54
【问题描述】:

我有一个 branch_user_permission 的数据库表,它有 3 个表列 [branch_id, permission_id, user_id]

这是数据库的示例数据

Sample Data of Branch Permission User

我只想映射或获取所有权限(permission_id)与其他分支(branch_id)相同的所有用户

例子:

[branch_id][permission_id][user_id]


[1][2][1]

[1][3][1]

[1][5][1]

[1][6][1]

[2][2][2]

[2][3][2]

[2][5][2]

[2][6][2]

[3][2][3]

[3][3][3]

[3][6][3]

[4][2][5]

[4][3][5]

[4][5][5]

[4][6][5]

因此,我将获得所有其他分支的所有权限都相同的所有 user_id 的预期输出:

  • 数组 (1,2,5)

【问题讨论】:

  • 你怎么知道数组 (1,2,5) 是正确的而不是数组 (3)?我认为您需要以某种方式建立预期权限集,或者正确答案只是具有相同权限[[1,2,5], [3]] 的一组 ID
  • 3 不包括在内,因为 user_id 为 3 的 permission_id 仅为 [2,3,6]。与 (1,2,5) 的 user_id 不同,permission_id 是 [2,3,5,6]
  • 我知道为什么它不包含在 1,2,5 中,但我仍然不知道为什么它不是正确的结果。是因为没有其他用户拥有这样的权限吗?如果其他用户拥有 2,3,6 个权限或多个组中相同数量的用户拥有与其他用户组不同的相同权限集,那么正确的结果是什么?
  • 获得用户的主要目标是我想获得与其他分支具有相同权限的所有用户。例如我有权限 2,3,6 我想检查其他分支是否也有权限 2,3,6。
  • 你说“其他分支”,所以你有预先确定的分支 ID(因此它的权限集)对吗?

标签: php sql optimization


【解决方案1】:

这适用于已知的权限集。您需要匹配所有这些,以便最后一个值 4 是集合中的权限 ID 数 (2,3,5,6)

SELECT user_id FROM branch_user_permission
WHERE permission_id IN (2,3,5,6)
GROUP BY user_id
HAVING COUNT(branch_id) = 4

我不知道您如何确定要查找的权限集,但如果它来自初始(已知)branch_iduser_id,您可能需要另一个查询来构建它(并计算)。在单个查询中执行此操作需要计数和 id 列表,这可能需要两个子查询 - 现在没有时间检查。

SqlFiddle DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多