gpt4 book ai didi

mysql - 返回 10 行,其中特定行位于 MySQL 中的位置 5

转载 作者:行者123 更新时间:2023-11-29 18:00:32 25 4
gpt4 key购买 nike

我正在尝试构建一个排行榜,其中返回按分数排序的 10 行。

但是,我希望特定用户 (ME) 出现在第 5 行 - 因此我希望特定用户上方的四个分数较高,而特定用户下方的五个用户分数较低。

数据库中可能有数百行。

所以,换句话说,我试图获取 10 行,并将我想要的用户放在中间。

所以像这样;

user_id, pos, name, score 
10, 1, Rita, 100
50, 2, Sue, 95
30, 3, Bob, 60
90, 4, Billy, 50
**14, 5, ME, 45**
46, 6, Bob, 30
89, 7, Thornton, 20
83, 8, Jeremy, 10
99, 9, Kyle, 5
16, 10, John, 1

我想我可以用多个 SQL 命令来破解它,但我完全困惑是否可以用一个命令来完成?

最佳答案

假设您的 pos 字段始终是最新的,您可以使用 the between operator获取Me在数据库中的位置后。
使用这两个查询你可以获得你想要的结果:

select @pos:=pos FROM so where user_id=5;

select *
FROM so
where pos between @pos-4
and @pos+5
order by score desc;

第一个查询将 @pos 变量值设置为所需行的位置。
第二个查询获取 @pos-4 和 @pos+5 之间的结果。

这是输出:

user_id pos name    score
3 3 Bob 130
4 4 Billy 120
6 5 Bob2 110
7 6 Joe 100
5 7 Me 90
8 8 Mario 80
9 9 Paul 70
10 10 Jeremy 60
11 11 Kyle 50
12 12 Kane 40

这是demo .

您也可以在单个查询中完成此操作,但我认为这会损害性能。

select * 
FROM so
where pos between (select pos FROM so where user_id=5)-4
and (select pos FROM so where user_id=5)+5
order by score desc;

关于mysql - 返回 10 行,其中特定行位于 MySQL 中的位置 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400612/

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