2016-11-13 70 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的降序获取特定音名的所有行。这样我就可以将它们放在我的HashMap中,其密钥为group_name,值为ArrayList的messages

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

我使用GreenDao图书馆从SqlLite获取数据,我试着像下面

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(); 

我设法用GROUP BY上面做查询,但它没有列出所有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 order by t.datetime desc'中选择t。*,然后在散列映射的正确位置顺序插入消息。 – lovasoa