mysql - SQL 根据信誉点获得排名
问题描述
如何通过信誉点获得用户排名排序。
'super_admin' 和 'staff' 角色不应该在排名中。
我的问题:
当我提出包括所有用户的请求时,排名很好,但是当我提出请求时,排除具有“super_admin”和“staff”角色的用户,排名是错误的
SELECT u.id, u.rank
FROM (
SELECT u.id, @rownum := @rownum +1 AS rank
FROM users u, (SELECT @rownum :=0 ) r
ORDER BY u.reputation DESC, u.register_date ASC
) AS u
LEFT JOIN users_role ur ON ur.user_id = u.id
LEFT JOIN roles r ON r.id = ur.role_id
WHERE r.key_role NOT IN ('super_admin','staff')
AND u.id=3
表格:
users table
ID REPUTATION REGISTERED_DATE
1 6000 2018-05-20 14:15:10
2 20 2018-05-22 14:15:10
3 2000 2018-05-25 14:15:10
4 350 2018-05-27 14:15:10
5 14 2018-05-27 19:15:10
6 0 2018-05-28 14:15:10
7 584 2018-05-29 14:15:10
8 54 2018-05-30 14:15:10
users_roles table
ID USER_ID ROLE_ID
1 1 1
2 2 2
3 3 3
4 4 3
5 5 3
6 6 3
7 7 3
8 8 3
roles table
ID NAME KEY_ROLE
1 Super Admin super_admin
2 Staff staff
3 Registered user registered_user
解决方案
将排序移动到最外层的查询:
(更新)
SELECT u.id, @rownum := @rownum +1 AS rank
FROM users u, (SELECT @rownum :=0 ) r
LEFT JOIN users_role ur ON ur.user_id = u.id
LEFT JOIN roles r ON r.id = ur.role_id
WHERE r.key_role NOT IN ('super_admin','staff')
ORDER BY u.reputation DESC, u.register_date ASC
推荐阅读
- pandas - 如何在 seaborn 中使用这些数据创建气泡图?
- if-statement - vba根据条件显示消息框
- jbpm - 用于实时项目的 JBPM 社区版或企业版
- go - CGO:如何释放由 C 数组支持的 go slice
- android - 有没有办法在 Android 11 上将图像保存到没有 SAF 的 USB 记忆棒?
- imagemagick - ImageMagick如何将输出分成两半
- javascript - 传入具有关联的唯一变量名的字符串数组
- web - 在不访问 Cpanel 的情况下复制 Joomla 网站
- text - 跨多个平台的文本显示实现
- oauth-2.0 - 如何从 wso2 IS 获取用户角色到配置为服务提供者的第三方应用程序