sqlite: перейти к предыдущей записи в наборе результатов? - PullRequest
1 голос
/ 28 июня 2010

В SQLite со стандартным интерфейсом C - есть ли простой способ (даже если немного взломать) итерация назад в наборе результатов?Я стараюсь не кэшировать результаты самостоятельно.

Решением, о котором я думал, было выполнение дополнительного запроса, который бы возвращал обратные результаты, но я не уверен, насколько он будет эффективен.

1 Ответ

2 голосов
/ 28 июня 2010

Нет, итеративный код sqlite специально односторонний. Я не знаю даже хакерского метода достижения того, что вы хотите, кроме кеширования всего этого, конечно: -).

Метод запроса в обратном направлении может работать немного, но вы не можете заставить обратный запрос идти вперед (назад), как обычный запрос в обратном направлении.

Как только ваш прямой запрос попадет в строку 50, а обратный запрос - в строку 20, строки с 21 по 49 станут недоступны для них обоих. Таким образом, вы не можете использовать его как метод просмотра общего назначения.

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

select f1, f2, f3 from tbl limit 50 offset 0
select f1, f2, f3 from tbl limit 50 offset 50
select f1, f2, f3 from tbl limit 50 offset 100

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

...