Google App Engine: как вы подсчитываете результаты запроса с учетом смещения? - PullRequest
1 голос
/ 19 августа 2011

Я использую нумерацию страниц в отсортированных моделях, и мои запросы извлекают слишком много данных.Способ отображения ссылок на страницы аналогичен Google: текущая страница подсвечивается и имеется окружающий «отступ» страниц, по которому вы можете перемещаться.Например, если имеется 20 страниц, заполнение равно 5, а вы находитесь на странице 10, ссылки на страницы будут выглядеть следующим образом:

... 5 6 7 8 9 [10] 11 12 1314 15 ...

Дело в том, что мне нужно рассчитать количество страниц ПОСЛЕ текущей страницы, чтобы узнать, сколько ссылок страниц после текущей страницы должно быть показано.Чтобы сделать это, я суммирую количество элементов, которые мне понадобятся для страниц заполнения, плюс текущую страницу, плюс один (чтобы узнать, показывать ли «...»), а затем получить эти результаты.Это приводит к массивному запросу результатов, что, в конечном счете, мне нужно только небольшое подмножество.

Google App Engine api предоставляет count () функцию , которая возвращаетколичество результатов, извлекаемых запросом.Однако он не позволяет мне указать смещение.

Как мне обойти эту проблему?

Я рассматриваю выборку первого элемента на следующей странице после текущей страницы, затемвыполнение count () для другого запроса, который сортирует значения этого элемента, если это имеет смысл.Я на правильном пути или я что-то упускаю полностью?Я относительно новичок в движке приложений, так что иди спокойно!Спасибо :)

ОБНОВЛЕНИЕ:

Спасибо, Питер.

Курсоры - действительно подходящий подход для использования.Вот пример для тех, кто хочет сделать то же самое:

# For example, the following query has 27 results.
book_query = Book.all().filter("name_lowercase < ", "b" )
# Let's fetch 10 books starting at offset 0...
r = book_query.fetch(10, 0)
# This returns a cursor to the book after the last fetched result, index 10
c = book_query.cursor()

# Now let's count the number of results after our fetch, limit 100.
# To use cursors, the query must be exactly the same.
book_query2 = Book.all().filter("name_lowercase < ", "b" ).with_cursor(c) 
book_query2.count(100) # Returns 17

1 Ответ

1 голос
/ 19 августа 2011

Я еще не использовал их, но я считаю, Курсоры запросов - это то, что вы ищете.

...