MySQL 如何有效率的获取 用户 被授权的分级结构(需要支持分页)?-灵析社区

Midclimateeee

分类结构(三级)如下 > `D` > `E` > `F` [ `F` 含 `Area` 信息 ] > `F` 总的数量级约是 6位数 表结构 > User [ U_id, ... ] > D [ D_id, D_name ... ] `// D 表` > E [ E_id, D_id, E_name ... ] `// E 表` > F [ F_id, D_id, E_id, F_name, F_area ... ] `// F 表` > P [ P_id, U_id, D_id, E_id, F_id, A_code ... ] `// 授权表` U_id, D_id, E_id, F_id 为 0 时,视为授权模式中的 `-`,即全部授权 A_code = "" 时,视为授权模式中的 `-`,即全部授权 授权模式(7种) > [1] - - - - // 授权所有 D , E , F > [2] D - - - // 授权 D,包括 D 下所有 E 和 F > [3] D E - - // 授权 D > E,包括 E 下所有 F > [4] D E F - // 授权 D > E > F > [5] - - - A // 授权 Area,包括 所有属于 Area 的 F,跨 D,跨 D > E > [6] D - - A // 授权 D 下的 Area ,含D 下所有 在 Area 的 F,跨 D > E > [7] D E - A // 授权 D > E 下的 Area ,含E 下所有 在 Area 的 F 考虑有以下情况: > 用户通过授权模式 - - - A ,可以获得 部分 D, E, F 的授权 > 用户通过授权模式 D - - A ,可以获得 部分 E, F 的授权 > 用户通过授权模式 D E - A ,可以获得 部分 F 的授权 > 当有 D > E,且 D > E 下没有 F 时,如果有对应授权,也需要选出 D 和 E MySQL 如何获取以下列表 > **重点** 某个 User 被授权的 F 列表 数量级可能有 4位数,需要分页,最终结果应该是去重的 > 某个 User 被授权的 E 列表 > 某个 User 被授权的 D 列表 遇到的问题 > `D列表` 和 `E列表` 可以通过多次 SQL 分别获取,然后在代码中合并记录到数组 > `F列表` 就不太合适了,一是数量有点多,二是要分页

阅读量:14

点赞量:0

问AI
查其中一个 User 被授权的 F 列: (SELECT F.F_id, F.F_name, F.F_area FROM P JOIN F ON P.F_id = F.F_id OR P.F_id = 0 WHERE P.U_id = @user_id AND (P.D_id = F.D_id OR P.D_id = 0) AND (P.E_id = F.E_id OR P.E_id = 0) AND (P.A_code = F.F_area OR P.A_code = "") ORDER BY F.F_id LIMIT x, y) -- x 是起始索引,y 是每页的数量 查其中一个 User 被授权的 E 列表: sql (SELECT E.E_id, E.E_name FROM P JOIN E ON P.E_id = E.E_id OR P.E_id = 0 WHERE P.U_id = @user_id AND (P.D_id = E.D_id OR P.D_id = 0) ORDER BY E.E_id LIMIT x, y) 查其中一个 User 被授权的 D 列表: (SELECT D.D_id, D.D_name FROM P JOIN D ON P.D_id = D.D_id OR P.D_id = 0 WHERE P.U_id = @user_id ORDER BY D.D_id LIMIT x, y)