【问题标题】:Querying records and making them groups from SQLite Table从 SQLite 表中查询记录并将它们分组
【发布时间】:2016-11-13 13:25:53
【问题描述】:

我不太明白如何在单个查询中完成。

问题:

我有一张这样的桌子

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,值为 messages 的 ArrayList。

 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 进行上述查询,但它没有列出所有行。我是否必须获取特定数字的所有数据并根据 group_name 将其分开遍历每一行?还是有更好的办法?

【问题讨论】:

  • 你为什么需要这个 HashMap ?看起来您只想将所有数据库存储在内存中...

标签: android sql sqlite greendao greendao-generator


【解决方案1】:

SQL 很简单,只有一个WHERE 子句和一个ORDER BY

SQL 如下所示:

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

我不确定这如何转化为您的 SQL 生成器,但它确实涉及删除 GROUP BY

【讨论】:

  • 如果我理解的查询是正确的,他想建立一个以电话号码为键和消息为值的哈希图。所以不需要 where 条件。我会简单地做:select t.* from t order by t.datetime desc,然后在哈希图中的正确位置按顺序插入消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
相关资源
最近更新 更多