gpt4 book ai didi

mysql - SQL用户排名取决于信誉点

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:33 25 4
gpt4 key购买 nike

如何根据信誉分获得用户排名。
排除“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 id, rank FROM (
SELECT u.id, @rownum := @rownum +1 AS rank
FROM (
SELECT u.id
FROM users u
LEFT JOIN users_roles 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.registered_date ASC
) AS u
,(SELECT @rownum :=0 ) r
) AS t
WHERE id=3

参见 demo
我在内部查询中包含了所有条件。

关于mysql - SQL用户排名取决于信誉点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55195638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com