Используя queryEqual и queryEnding вместе? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь выполнить запрос по «жанру»: «Искусство и гуманитарные науки», но мне также нужен запрос «Завершить» для разбивки моих данных на основе отметки времени.

Однако мы не можем использовать оба из них объединены в Xcode. Какой еще метод?

Вот что я пытаюсь: (не работает)

queryRef = ref.queryOrdered(byChild: "genre").queryEqual(toValue: "Arts & Humanities").queryEnding(atValue: lastTimestamp)

Вот код, который я использую для разбивки своих данных на страницы. Работает нормально, но я не могу отсортировать нумерацию страниц только для «Искусств и гуманитарных наук». это приведет к разбивке по всему моему каналу.

        var queryRef:DatabaseQuery
        let lastPost = self.postList.last


        if lastPost != nil {
            let lastTimestamp = lastPost!.createdAt.timeIntervalSince1970 * 1000

            queryRef = ref.queryOrdered(byChild: "timestamp").queryEnding(atValue: lastTimestamp)

        } else {
            queryRef = ref.queryOrdered(byChild: "timestamp")

        }

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Невозможно использовать два свойства в запросе. Полное объяснение, почему это так, и ограниченные возможности обхода этого, смотрите в моем ответе здесь: Запрос, основанный на нескольких выражениях where в Firebase

Но в вашем случае вы можете быть в состоянии обойтись проще. Если существует несколько узлов с одинаковым genre, вы можете передать ключ в качестве второго аргумента queryStarting(atValue:) и queryEnding(atValue:). Поэтому вместо попытки добавить дополнительный фильтр в метку времени, используйте ключ для устранения неоднозначности с чем-то вроде:

queryRef = ref.queryOrdered(byChild: "genre").queryStarting(atValue: "Arts & Humanities", keyOfLastItemOnPreviousPage)

Где keyOfLastItemOnPreviousPage - это ключ последнего элемента в Предыдущая страница. Затем он также станет первым элементом на следующей странице, поэтому вы захотите извлечь еще один дочерний узел, чем вам нужно, и пропустите этот клиентский блок, если вы не хотите показывать перекрытие.

0 голосов
/ 09 февраля 2020

Вы можете использовать queryOrdered с queryEqual:

queryRef = ref.queryOrdered(byChild : "genre").queryEqual(toValue : "Arts & Humanities")

Затем используйте метод observe для извлечения данных, при этом будут извлечены данные с genre = Arts & Humanities, затем внутри слушателя создайте другой query, на этот раз вы используете только метод queryEnding и подключите другого прослушивателя для извлечения данных в соответствии с запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...