選択した行の数と選択したデータを取得したい。現在、2つのSQLステートメントを使用する必要があります。
一つは
_select * from XXX where XXX;
_
もう一つは
_select count(*) from XXX where XXX;
_
単一のSQL文字列で実現できますか?
Sqlite3のソースコードを確認し、sqlite3_changes()
の関数を見つけました。ただし、この関数は、データベースが変更された場合(_insert, delete or update
_の後)にのみ役立ちます。
誰でもこの問題で私を助けることができますか?どうもありがとうございました!
この方法を試してください
select (select count() from XXX) as count, *
from XXX;
SQLでは、単一行(カウント)と複数行の結果(テーブルからデータを選択)を混在させることはできません。これは、大量のデータを返す際の一般的な問題です。これを処理するためのヒントを次に示します。
最初のN行を読んで、ユーザーに「N行以上使用可能」と伝えます。あまり正確ではありませんが、多くの場合十分です。カーソルを開いたままにしておくと、ユーザーがビューの下部に到達したときにさらにデータを取得できます(Googleリーダーがこれを行います)
データを直接選択する代わりに、まず一時テーブルにコピーします。 INSERTステートメントは、コピーされた行の数を返します。後で、一時テーブルのデータを使用してデータを表示できます。この一時テーブルに「行番号」を追加して、ページングをより簡単にすることができます。
バックグラウンドスレッドでデータを取得します。これにより、ユーザーはデータグリッドまたはテーブルがより多くのデータで満たされている間にアプリケーションを使用できます。
select (select COUNT(0)
from xxx t1
where t1.b <= t2.b
) as 'Row Number', b from xxx t2 ORDER BY b;
this を試してください。
これらを単一のステートメントに結合できます。
select count(*), * from XXX where XXX
または
select count(*) as MYCOUNT, * from XXX where XXX
既にselect * from XXX
結果、あなたのプログラムで配列の長さを見つけることができますか?
Prepare/step/finalizeの代わりに sqlite3_get_table
を使用すると、列の数と名前を含む配列(「結果テーブル」)にすべての結果が一度に取得されます。行の数。次に、sqlite3_free_table
で結果を解放する必要があります
一意のタイトルの数を取得するには、次の文としてDISTINCT句をCOUNT関数に渡す必要があります。
SELECT
COUNT(DISTINCT column_name)
FROM
'table_name';