我有一个关于制作“高分榜”的问题。
假设我有一个拥有1.000.000活跃用户的在线游戏。每个用户都有从0到X的点。现在,我想显示一个排名列表。在一个页面中显示所有百万条目是疯狂的,因此它被分为Y页(每页100个条目=> 10.000页)。
我不确定如何解决它。
在一个SELECT中,获取结果并找到具有for循环的当前用户并显示该特定页面。 (但所有其他999.900条目将保存在RAM中,尽管它没有显示)。对于页面更改,我可以使用结果数据而无需第二次数据库调用。 (所以我不关心那个时间点的变化)
SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;
2.1如果它真的是更好的表现 2.2如何获得正确的起始页面因为我只有用户的分数而不是真正的他的位置
那么我怎么能解决这个问题呢。我真的不知道mysql可以处理什么。更小的呼叫比一个大呼叫更好。 我甚至可以保存巨大的结果数据吗? 第二个解决方案会在每次更改页面时更新所有更改的点,但我更关心性能,然后总是更新列表数据。
感谢您的帮助! 马库斯
答案 0 :(得分:0)
使用分页。在SQL中,它是一个"限制"子句:
SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points LIMIT 0, 20;
上述查询将仅返回原始选择的前20行。
您可以通过get传递页面参数,如下所示:highscore.php?page = 1或?page = 2等等。