2016-11-13 24 views
0

これは単一クエリでどのように行うことができるのか分かりません。レコードをクエリしてSQLiteからグループ化するテーブル

問題:

私は私が何をしたいのか、この

id| phonenumber| message| group_name| datetime 

例データ

1 | 987654321 | "hi" | G1 | xxxxxxx 
2 | 987654321 | "hi" | G1 | xxxxxxx 
1 | 987145678 | "hello" | G2 | xxxxxxx 

のようなテーブルを持っているが、私は必要とするような方法で上記SqlLiteテーブルをクエリであります特定の電話番号のすべての行をdatetimeの降順で取得します。私はキーをgroup_nameとして、ArrayListとしての値をmessagesとしてHashMapに入れることができます。私はSqlLiteからデータをフェッチするためにGreenDaoライブラリを使用しています

HashMap<String, ArrayList<String>> mapper = new HashMap<>(); 

は、私がGROUP BYを使用してクエリの上に行うために管理

List<activity> activities = activityDao.queryBuilder().where(new WhereCondition.StringCondition(com.ficean.android.ficean.db.activityDao.Properties.Contact_number.eq(phonenumber) + "GROUP BY group_name")).orderDesc(com.ficean.android.ficean.db.activityDao.Properties.Date_time).build().list(); 

下回るようにしようとしたが、すべてのrows.Doは、私が取得する必要がリストアップされていません特定の番号のすべてのデータと、group_nameに基づいて各行をループして区切っていますか?またはもっと良い方法がありますか?

+0

なぜこのHashMapが必要ですか?すべてのデータベースをメモリに保存したいと思うように見えます... – lovasoa

答えて

0

SQLは非常に単純です。WHERE句とORDER BYです。 SQLは次のようになります

select t.* 
from t 
where t.phone = ? 
order by t.datetime desc; 

私は、これはあなたのSQLジェネレータに変換する方法を確認していないが、それはGROUP BYを削除関与ありません。

+0

私は質問を正しく理解していれば、キーとしてphonenumberと値としてメッセージを持つhashmapを構築したいと考えています。ですから、どこの条件が必要なのでしょうか。私は単に '' t.datetime desc 'でtを選択してから、ハッシュマップの正しい場所に順番にメッセージを挿入します。 – lovasoa

関連する問題