少しトリッキーな問題があります。私のアプリはユーザー データを SQLite データベースに入力し、クエリを作成してデータを取り戻すことができました。
これには、個別の値のリストを取得するクエリが含まれます。例は次のとおりです。次のデータがあるとします。
Column a | Column b | Column c
a a a
a b b
a b b
b b b
'group by' 関数を使用すると、クエリは次のリストを作成します。
aaa
abb
bbb
だから私がしようとしているのは、これを展開して、それぞれの個別のエントリが発生する回数のカウントを取得することです-したがって、上記の場合は次のようになります:
1 x aaa
2 x abb
1 x bbb
データベースにクエリを実行したら、カーソルから各エントリの出現回数を取得する方法はありますか?または、この情報を取得するために別のクエリを作成する必要がありますか..
現時点での私のクエリは次のとおりです。
public Cursor fetchDamagedComponentSpecForInspection(long inspectionId, String componentType) {
Cursor mCursor = rmDb.query(true, DAMAGED_COMPONENTS_TABLE, new String[] {
DAMAGED_COMPONENT_ID,
LOCATION_LINK,
RUN_LINK,
AREA_LINK,
INSPECTION_LINK,
LOCATION_REF,
RACKING_SYSTEM,
COMPONENT,
COMPONENT_TYPE,
QUANTITY,
POSITION,
RISK,
ACTION_REQUIRED,
NOTES_GENERAL,
MANUFACTURER,
TEXT1,
TEXT2,
TEXT3,
TEXT4,
NOTES_SPEC,
SPEC_SAVED},
INSPECTION_LINK + " = " + inspectionId + " AND " + COMPONENT_TYPE + " = ? AND " + SPEC_SAVED + " = ? ",
new String[] {componentType, "Yes"},
MANUFACTURER + ", " + TEXT1 + ", " + TEXT2 + ", " + TEXT3 + ", " + TEXT4 + ", " + NOTES_SPEC,
null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
詳細については、クエリを呼び出してデータを取得するメイン アクティビティのコードを次に示します。
final Cursor componentsAndSpecCursor = (Cursor) rmDbHelper.fetchComponentsAndSpecForManufacturer(inspectionId, rackingSystem, manufacturer);
if(componentsAndSpecCursor.moveToFirst()){
do {
componentType = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.COMPONENT_TYPE));
specText1 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT1));
specText2 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT2));
specText3 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT3));
specText4 = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.TEXT4));
specNotes = componentsAndSpecCursor.getString(componentsAndSpecCursor.getColumnIndex(RMDbAdapter.NOTES_SPEC));
message.append(componentType).append(" ").append(specText1).append(" ").append(specText2).append(" ").append(specText3).append(" ").append(specText4).append(" ").append(specNotes).append("\r\n");
}
while (componentsAndSpecCursor.moveToNext());
}
componentsAndSpecCursor.close();
そのため、このコードをクエリに含めた後、カウントを取得する方法もわかりません (これがどのように行われるかはまだわかりません!)。