gpt4 book ai didi

Mysql - 获取用户上下5行(排名)

转载 作者:行者123 更新时间:2023-11-30 22:45:12 29 4
gpt4 key购买 nike

我有一张 table :

r_user  | r_points |
--------------------
user1 | 12 |
user2 | 124 |
user3 | 34 |
user4 | 35 |
user5 | 57 |
user6 | 3 |
user7 | 452 |
user8 | 8 |
user9 | 12 |
user-c | 0 |
user-b | 0 |
user-a | 0 |

假设我想获取 user6 的排名。我希望他的条目上方和下方有 5 个用户按 r_points 和下一个 r_user ASC 排序,以便具有相同点数的用户(user-c,user-b,user-a)像(user-a,user-b .. .)。

如果上面或下面没有5个用户,差值应该放在相反的位置。因此,如果 user6 是从底部算起的第 4 个用户,我希望在上面获取 6 个用户。始终以 10 个用户为计数。

这就是我的结果,我想要:

r_user  | r_points |
--------------------
user5 | 57 |
user4 | 35 |
user3 | 34 |
user9 | 12 |
user1 | 12 | -> In this direction ORDER is other way round
user8 | 8 |
user6 | 3 | --> THATS THE USER BY ID <--
user-a | 0 |
user-b | 0 |
user-c | 0 |

我不知道该怎么做,因为我的表有 r_user 作为 PK 而没有 AI-ID。

谢谢

编辑:

这是我的版本。但是,如果用户位于倒数第 3 位,则该版本不会在上方/下方获取更多用户。仅当下方和上方有 5 行时才有效。这不是我想要的。

(
SELECT r_user, r_points
FROM ranking
WHERE r_points >= ( SELECT r_points FROM ranking WHERE r_user = 'user6' )
ORDER BY r_points ASC LIMIT 5
)
UNION DISTINCT
(
SELECT r_user, r_points
FROM ranking
WHERE r_points <= ( SELECT r_points FROM ranking WHERE r_user = 'user6' )
ORDER BY r_points DESC LIMIT 6
)
ORDER BY r_points DESC, r_user ASC

最佳答案

你写道你没有唯一的 id,所以在我的 fiddle 中,用户被这行 IF(t.r_user = 'user2' 硬编码。要改变用户,您必须更改该值。

希望对您有所帮助:

http://sqlfiddle.com/#!9/d2329/31

SELECT *
FROM (
SELECT
t.*,
IF(@idx IS NULL, @idx:=1, @idx:=@idx+1) idx,
IF(t.r_user = 'user2',@median:=r_points, IF(@start IS NULL, @start:=@idx, IF(@after IS NULL, @start:=@idx, null))),
IF(@median IS NULL, IF(@before IS NULL,@before:=1, @before:=@before+1) ,
IF(@after IS NULL ,@after:=0, @after:=@after+1))

FROM (
SELECT *
FROM table1
ORDER BY r_points DESC
) t
) t2
WHERE IF(1+@before+@after<=10, true,
IF(@before<=5, t2.idx >= 0 AND t2.idx <= @start+5+(5-@before),
IF(@after<=4, t2.idx >= @start-4-(4-@after),
t2.idx >= @start-4 AND t2.idx <= @start+5
)
)
);

关于Mysql - 获取用户上下5行(排名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854641/

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