Как получить количество строк выбранного результата sqlite3?

Это магическое заклинание напечатает строку, где первый персонаж виден впервые:

34
задан Darshana 31 May 2012 в 07:31
поделиться

5 ответов

SQL не может смешать одну строку (подсчет) и многострочные результаты (выбирающий данные из Ваших таблиц). Это - типичная проблема с возвратом огромных объемов данных. Вот некоторые подсказки, как обработать это:

  • Read первые строки N и говорят пользователю "больше, чем доступные строки N". Не очень точный, но часто достаточно хороший. Если Вы сохраняете курсор открытым, можно выбрать больше данных, когда пользователь достигает низшей точки представления (Google Reader делает это)

  • Вместо того, чтобы выбрать данные непосредственно, сначала скопируйте его во временную таблицу. Оператор INSERT возвратит количество скопированных строк. Позже, можно использовать данные во временной таблице для отображения данных. Можно добавить "номер строки" к этой временной таблице для создания подкачки страниц более простой.

  • Выборка данные в фоновом потоке. Это позволяет пользователю использовать Ваше приложение, в то время как сетка данных или таблица заполняются большим количеством данных.

13
ответ дан 27 November 2019 в 17:13
поделиться

Вы могли объединить их в отдельного оператора:

select count(*), * from XXX where XXX

или

select count(*) as MYCOUNT, * from XXX where XXX
1
ответ дан 27 November 2019 в 17:13
поделиться

Как только Вы уже имеете select * from XXX результаты, можно ли просто найти длину массива в праве программы?

0
ответ дан 27 November 2019 в 17:13
поделиться

Если Вы используете sqlite3_get_table вместо, готовятся/ступают/завершают, Вы получите все результаты сразу в массиве ("таблица результата"), включая числа и названия столбцов и количество строк. Тогда необходимо освободить результат с sqlite3_free_table

0
ответ дан 27 November 2019 в 17:13
поделиться

Для тех то, кто все еще ищет другой метод, более изящный, который я нашел для получения общего количества строки, должно было использовать CTE., это гарантирует, что количество только вычисляется однажды:

WITH cnt(total) as (SELECT COUNT(*) from xxx) select * from xxx,cnt

единственный недостаток состоит в том, если оператор Where необходим, он должен быть применен и в основном запросе и в запросе CTE.

В первом комментарии, Alttag заявил, что нет никакой проблемы для выполнения 2 запросов. Я не соглашаюсь с этим, если оба не часть уникальной транзакции. В противном случае исходная таблица может быть изменена между 2 запросами любым, ВСТАВЛЯЮТ или УДАЛЯЮТ из другого потока/процесса. В таком случае значение количества могло бы быть неправильным.

0
ответ дан 27 November 2019 в 17:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: