5

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

表 A
列:eventID、userID、userName
数据: 1、111
、Harry
2、222、Ben
3、534、Helen
2、534、Helen
2、545、James

最终结果
我试图在活动中显示如下:
社交 1:参加者:Harry
Social 2:参加者:Ben、Helen、James
Social 3:参加者:Helen

最好的方法是如何做到这一点?

我的初始计划:
1) 对表 A 中的 eventID 运行 SQL 选择 (Query1)
。2) 循环遍历步骤 1 的每个结果。
3) 对于查询 1 的每个结果结果,选择表 A 中当前的所有行eventID (称为查询 2)
4) 循环通过步骤 3 查询 2 的结果,对于每个结果,将用户名添加到字符串缓冲区。在 Query 2 结果的末尾,将 eventID 与生成的 StringBuffer 一起插入到一个新表中:

Table B:
columns: eventID, userName
Data:
1, "Harry"
2, "Ben, Helen, James"
3, "Helen "

然后使用表 B 中的数据与 SimpleCursorAdapter 一起使用数据填充标准 ListActivity,从而生成所有事件的列表和以逗号分隔的与会者列表。然后每次重新生成表 A 时,清除表 B 中的数据,然后重新填充它。

问题:
这是最好的方法/最整洁的方法吗?我真的不喜欢有一个临时表只是为了做到这一点的想法。

背景:我是 Android 开发新手,自从几年前在 uni 学习 Java 后,才再次接触 Java。我在编程方面的强项在于 HTML、PHP、MySQL。

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

我将不胜感激有关如何完成此任务的一些帮助/意见。非常感谢!

4

2 回答 2

6

您不能尝试以下方法吗?

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

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

查看更多关于GROUP_CONCAT.

于 2012-11-01T13:42:16.833 回答
1

你把这种方法弄得太复杂了。您只需要一个查询,而不需要辅助表。首先,放弃SimpleCursorAdapter并扩展BaseAdapter。我这么说的原因是因为BaseAdapter你不需要一个 active Cursor,所以你可以在 Java 中完成工作并且省去一个大麻烦,而不是尝试用 SQL 来操作数据。

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

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

于 2012-11-01T13:46:35.447 回答