【发布时间】:2015-01-20 10:03:24
【问题描述】:
我有一个简单的权限系统,有 3 个表:users、permissions 和 permission_user。我想获得所有授予的权限以及授予谁的信息。结果应按以下顺序排序:
- 用户的权限数(他的权力),最强的优先
- 创建用户的日期,最早的在前
- 权限权重(
weight列),最小在前
这是我的查询:
SELECT `users`.`email`,
`permissions`.`key`
FROM `users`
JOIN `permission_user` ON `permission_user`.`user_id` = `users`.`id`
JOIN `permissions` ON `permissions`.`id` = `permission_user`.`permission_id`
ORDER BY (
SELECT COUNT(*)
FROM `permission_user`
WHERE `user_id` = `users`.`id`
) DESC,
`users`.`created_at` ASC,
`permissions`.`weight` ASC;
它工作正常,但我想知道是否有任何方法可以在没有子查询或计算授予的总权限的情况下做到这一点。这是结果集中存在的东西,我可以从中计算唯一的用户 ID,但这可能吗?
【问题讨论】:
-
Count(Distinct user_id) 可能是您正在寻找的 - 这看起来与您正在做的类似 - stackoverflow.com/questions/5737628/mysql-count-distinct
-
@Giles 我尝试按
permission_user.id分组(这是我唯一可以分组的列,因为我需要所有记录)并计算permission_user.user_id,但我得到了 1 个记录。