分类结构(三级)如下 > `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列表` 就不太合适了,一是数量有点多,二是要分页