使用SQLite和Group By坚持使用android SQL设计

时间:2012-11-01 13:30:23

标签: java android sql sqlite

有以下问题: 尝试显示表格中的与会者列表。表A是通过将来自Web源(HTML抓取)的数据“同步”到表A中而生成的。

表A
列:eventID,userID,userName
数据:
1,111,哈利 2,222,本
3,534,海伦
2,534,海伦
2,545,詹姆斯

最终结果
我试图在活动中显示如下:
社交1:出席者:哈利 社交2:出席者:Ben,Helen,James 社交3:出席者:Helen

这样做的最佳方法是什么?

我的初步计划:
1)在表A的eventID上运行带有Group By的SQL select(Query1) 2)循环执行步骤1中的每个结果。
3)对于查询1的每个结果结果,使用当前eventID(被叫查询2)选择tableA中的所有行 4)循环执行步骤3查询2的结果,并为每个结果将用户名添加到字符串缓冲区。在查询2结果的末尾,将eventID与生成的StringBuffer一起插入到新表中:

表B:
columns:eventID,userName
数据:
1,“哈利”
2,“本,海伦,詹姆斯”
3,“海伦”

然后使用表B中的数据和SimpleCursorAdapter,使用数据填充标准ListActivity,生成所有事件的列表,以及逗号分隔的与会者列表。然后每次重新生成表A时,清除表B中的数据,并重新填充它
问题:
这是最好的方式/最好吗?我真的不喜欢有一个临时表来做这件事。

背景:我是Android开发人员的新手,并且自从几年前在大学工作以来刚刚再次开始使用Java。我在编程方面的优势在于HTML,PHP,MySQL。

额外信息:为表A收集数据的方式是,页面被抓取,其中包含特定用户的所有事件。然后我的目标是以相反的方式显示这一点,通过显示每个事件,所有参加的用户。

我很感激有关如何实现这一目标的一些帮助/意见。非常感谢!

2 个答案:

答案 0 :(得分:6)

难道你不能尝试以下内容吗?

SELECT 
    eventID,
    userID, 
    GROUP_CONCAT(userName, ",") AS users
FROM table_a
GROUP BY eventID

因此,您可以使用单个查询获取所有数据。

详细了解GROUP_CONCAT

答案 1 :(得分:1)

你这样做太复杂了。您只需要一个查询,而不需要辅助表。首先,抛弃SimpleCursorAdapter并扩展BaseAdapter。我之所以这么说是因为BaseAdapter你不需要活跃的Cursor,所以你可以用Java做的工作让自己头疼,而不是试图操纵数据用SQL。

  • 运行您的第一个查询(按eventID分组)
  • 遍历所有结果,将名称添加到字符串(以逗号分隔)
  • 当eventId更改时,将字符串转储到容器中并开始新的
  • 将数据容器传递到BaseAdapter

您可能需要一个Event对象来保存ID和名称。然后,您可以将每个Event添加到ArrayList并将其传递给适配器。