web-dev-qa-db-ja.com

選択した結果の行数をsqlite3から取得する方法は?

選択した行の数と選択したデータを取得したい。現在、2つのSQLステートメントを使用する必要があります。

一つは

_select * from XXX where XXX;
_

もう一つは

_select count(*) from XXX where XXX; 
_

単一のSQL文字列で実現できますか?

Sqlite3のソースコードを確認し、sqlite3_changes()の関数を見つけました。ただし、この関数は、データベースが変更された場合(_insert, delete or update_の後)にのみ役立ちます。

誰でもこの問題で私を助けることができますか?どうもありがとうございました!

34
user26404

この方法を試してください

select (select count() from XXX) as count, * 
from XXX;
15

SQLでは、単一行(カウント)と複数行の結果(テーブルからデータを選択)を混在させることはできません。これは、大量のデータを返す際の一般的な問題です。これを処理するためのヒントを次に示します。

  • 最初のN行を読んで、ユーザーに「N行以上使用可能」と伝えます。あまり正確ではありませんが、多くの場合十分です。カーソルを開いたままにしておくと、ユーザーがビューの下部に到達したときにさらにデータを取得できます(Googleリーダーがこれを行います)

  • データを直接選択する代わりに、まず一時テーブルにコピーします。 INSERTステートメントは、コピーされた行の数を返します。後で、一時テーブルのデータを使用してデータを表示できます。この一時テーブルに「行番号」を追加して、ページングをより簡単にすることができます。

  • バックグラウンドスレッドでデータを取得します。これにより、ユーザーはデータグリッドまたはテーブルがより多くのデータで満たされている間にアプリケーションを使用できます。

13
Aaron Digulla
select (select COUNT(0) 
            from xxx t1 
            where t1.b <= t2.b 
            ) as 'Row Number', b from xxx t2 ORDER BY b; 

this を試してください。

2
FormatD

これらを単一のステートメントに結合できます。

select count(*), * from XXX where XXX

または

select count(*) as MYCOUNT, * from XXX where XXX
1
dalle

既にselect * from XXX結果、あなたのプログラムで配列の長さを見つけることができますか?

0
Swaroop C H

Prepare/step/finalizeの代わりに sqlite3_get_table を使用すると、列の数と名前を含む配列(「結果テーブル」)にすべての結果が一度に取得されます。行の数。次に、sqlite3_free_tableで結果を解放する必要があります

0

一意のタイトルの数を取得するには、次の文としてDISTINCT句をCOUNT関数に渡す必要があります。

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

ソース: http://www.sqlitetutorial.net/sqlite-count-function/

0