gpt4 book ai didi

mysql - 确保从 MySQL 查询返回正确的行数

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:06 24 4
gpt4 key购买 nike

我有一个(游戏)排行榜表,其中包含一个由另一个查询更新的排名。它以 ID 为中心——当我查询表时,我理想地想要取回 N 条记录。所以我在记录上做了一个联合,限制为 N/2,如下所示:

(SELECT * FROM test1 t WHERE t.rank > (SELECT rank FROM test1 t2 WHERE id=ID)+0 ORDER BY rank LIMIT 0, N/2)
UNION ALL
(SELECT * FROM test1 t WHERE t.rank <= (SELECT rank FROM test1 t2 WHERE id=ID)+0 ORDER BY rank desc LIMIT 0, N/2) ORDER BY rank

虽然这在排行榜顶部时不太有效,但它只会返回较低的 N/2。有没有办法确保它总是返回 N 条记录?我确实认为您可以有目的地获取比所需更多的记录,然后剪掉不需要的记录。虽然我不知道如何通过查询来做到这一点!

感谢任何帮助:)

最佳答案

您可以巧妙地使用 order bylimit 来做到这一点:

SELECT t.*
FROM test1 t cross join
(SELECT rank FROM test1 t2 WHERE id = @ID) as theone
ORDER BY ABS(theone.rank - t.rank)
LIMIT N;

然后您可能希望这些按排名顺序返回:

SELECT t.*
FROM (SELECT t.*
FROM test1 t cross join
(SELECT rank FROM test1 t2 WHERE id = @ID) as theone
ORDER BY ABS(theone.rank - t.rank)
LIMIT N
) t
ORDER BY t.rank;

关于mysql - 确保从 MySQL 查询返回正确的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390268/

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