SQL取决于声誉点

  • 本文关键字:取决于 SQL mysql
  • 更新时间 :
  • 英文 :


如何通过信誉点获得用户级排序。
" super_admin"one_answers"员工"角色不应处于等级。

我的查询:
当我提出包括所有用户在内的请求时,排名很好,但是当我提出我的请求不包括具有" super_admin"one_answers"员工"角色的用户时,排名是错误的

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

最新更新