Mysql SQL根据信誉点获得排名

Mysql SQL根据信誉点获得排名,mysql,Mysql,如何通过信誉点获得用户排名排序。 “超级管理员”和“工作人员”角色不应在级别中 我的问题是: 当我提出我的要求,包括所有用户的排名是好的,但 当我提出请求时,排除了角色为“超级管理员”和“职员”的用户,排名是错误的 SELECT u.id, u.rank FROM ( SELECT u.id, @rownum := @rownum +1 AS rank FROM users u, (SELECT @rownum :=0 ) r ORDER BY u.repu

如何通过信誉点获得用户排名排序。 “超级管理员”和“工作人员”角色不应在级别中

我的问题是: 当我提出我的要求,包括所有用户的排名是好的,但 当我提出请求时,排除了角色为“超级管理员”和“职员”的用户,排名是错误的

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
表:


将排序移动到最外层的查询:

更新

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

你期待什么结果?生成文本格式的结果。。此外,表格设计建议用户可以拥有多个角色。如果用户拥有staff和registered_用户角色,会发生什么?请详细说明?如果希望排序选择器与排序器匹配,还需要将其移到查询外部。另外,在你原来的帖子中,你有一个WHERE声明,上面说。。。u.id=3。我假设这是您所做的一些测试的遗留问题?理想情况下,您不应该在同一SQL执行级别上混合使用旧的逗号连接语法和新的语法,混合使用这些旧的和新的连接语法可能会导致优化器部分出现问题。。更好的方法是从用户u交叉连接选择@rownum:=0R,而不是从用户u,选择@rownum:=0R。仍然是相同的问题…用户id 3排名第二…应该排名第一
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