【发布时间】:2017-10-21 02:36:51
【问题描述】:
我使用 Unity 在 Firebase 实时数据库中创建了一个简单的排行榜:
键对应用户名,值对应用户分数。
我想要
- 检索前 20 条记录
- 按分数排序时,检索给定用户名周围的 5 条记录(上 2 条、自身和下 2 条)。
我设法通过以下查询检索前 100 名:
FirebaseDatabase.DefaultInstance.GetReference (LEADERBOARD_TABLE_CAPTION).Child (leaderboardName).OrderByValue ().LimitToLast (20)
我使用 LimitToLast 是因为排序是按升序完成的。
结果如下:
1.test31,987
2.test85,975
3.test67,943
4.test94,941
5.test95,940
6.test71,929
7.test16,917
8.test64,911
9.test100,906
10.test42,870
11.test54,863
12.test88,861
13.test5,859
14.test97,844
15.test46,836
16.test26,765
17.test52,764
18.test4,763
19.test70,756
20.test51,742
然后对于第二个任务,我想检索用户名周围的分数,比如说“test100”。我想检索这样一个结果(注意test100不需要在前20):
7.test16,917
8.test64,911
9.test100,906
10.test42,870
11.test54,863
我想运行这样的查询,从 test100 开始并限制到前 3 个,然后在 test100 限制到最后 3 个结束,但以 按值排序 方式。没有这样的功能(我无法找到)。 StartAt 和 EndAt 始终基于 value ,但我无法根据分数 906 将查询居中(可能有很多用户的分数为 906)。
即使只有一个 906,我的解决方案仍然不起作用。当我居中并获得大约 906 的前 2 和后 2 分数时,我不知道居中值的排名,也无法显示我当前用户的当前排名。最低效的解决方案是检索所有按值排序的分数并搜索当前用户,但当我有 10.000 条记录时,这不是解决方案。
我该怎么做?
最好的问候,
费西斯
【问题讨论】:
标签: c# firebase firebase-realtime-database unity5