有以下问题: 尝试显示表格中的与会者列表。表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收集数据的方式是,页面被抓取,其中包含特定用户的所有事件。然后我的目标是以相反的方式显示这一点,通过显示每个事件,所有参加的用户。
我很感激有关如何实现这一目标的一些帮助/意见。非常感谢!
答案 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。
BaseAdapter
您可能需要一个Event
对象来保存ID和名称。然后,您可以将每个Event
添加到ArrayList并将其传递给适配器。