В идеале, первый пользователь, получивший этот балл, должен быть выше остальных с таким же баллом в таблице
По сути, вы пытаетесь заказать два свойства: userHighScore
и userHighScoreTimestamp
(я придумал имя, так как вы не указали его в своем вопросе). База данных Firebase Realtime может запрашивать только одно свойство. См. Запрос на основе нескольких предложений where в Firebase
.
То, что вы можете сделать, - это определить дополнительное свойство, которое объединяет значения высокой оценки и достигнутой отметки времени:
users: {
derenceUid: {
userHighScore: 42,
userHighScoreTimestamp: 1557695609344,
userHighScore_Timestamp: "000042_1557695609344",
},
dougUid: {
userHighScore: 31,
userHighScoreTimestamp: 1557609264895,
userHighScore_Timestamp: "000005_1557609264895",
},
pufUid: {
userHighScore: 42,
userHighScoreTimestamp: 1557695651730,
userHighScore_Timestamp: "000042_1557695651730",
}
}
С этой структурой вы можете получить самого последнего пользователя с наибольшим количеством очков:
ref.queryOrdered(byChild: "userHighScore_Timestamp"). queryLimited(toLast: 1)
Стоит отметить, что я набрал шесть цифр, чтобы набрать высокий балл у пользователя. Это необходимо, поскольку Firebase проведет лексикографическое сравнение этих клавиш, и без отступа "5_1557609264895"
будет больше, чем "42_1557695609344"
. Вы должны выяснить, сколько цифр может содержать ваш максимальный счет. В моем примере я использовал 6 цифр, поэтому он может содержать до 1 миллиона.