5

次の問題があります: テーブルから出席者のリストを表示しようとしています。テーブル A は、Web ソース (HTML スクレイピング) からのデータをテーブル A に「同期」することによって生成されます。

表 A
列: eventID、userID、userName
データ: 1、111、
Harry 2、222、
Ben 3、534、
Helen 2、534、
Helen 2、545
、James

最終結果
アクティビティでこれを次のように表示しようとしています:
ソーシャル 1: 出席者: ハリー
ソーシャル 2: 出席者: ベン、ヘレン、ジェームズ
ソーシャル 3: 出席者: ヘレン

これを行う最善の方法は何ですか?

私の最初の計画:
1) テーブル A の eventID で Group By を使用して SQL select (クエリ 1) を実行します。2 )
ステップ 1 の各結果を循環します。
eventID (クエリ 2 と呼ばれる)
4) ステップ 3 クエリ 2 の結果を循環し、各結果について、ユーザーの名前を文字列バッファーに追加します。 クエリ2の結果の最後に 、 eventIDを結果の StringBuffer と共に新しいテーブルに挿入


ます 。 "




次に、テーブル B のデータを SimpleCursorAdapter と共に使用して、標準の ListActivity にデータを入力し、すべてのイベントのリストと、参加者のカンマ区切りのリストを作成します。次に、テーブル A が再生成されるたびに、テーブル B からデータを消去し、再入力します。

質問:
これはこれを行うための最良の方法ですか?これを行うためだけに一時テーブルを用意するという考えはあまり好きではありません。

背景: 私は Android 開発に不慣れで、数年前に大学で行って以来、Java を再び取り上げたばかりです。私のプログラミングの強みは、HTML、PHP、MySQL です。

追加情報: テーブル A のデータを収集する方法は、特定のユーザーのすべてのイベントを含むページをスクレイピングすることです。次に、イベントごとに参加しているすべてのユーザーを表示することで、これを逆の方法で表示することを目指しています。

これを達成する方法についての助け/意見をいただければ幸いです。どうもありがとう!

4

2 に答える 2

6

次のようなことはできませんか?

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

したがって、1 回のクエリですべてのデータを取得できます。

の詳細を参照してくださいGROUP_CONCAT

于 2012-11-01T13:42:16.833 に答える
1

あなたはこの方法を複雑にしすぎています。本当に必要なクエリは 1 つだけで、セカンダリ テーブルは必要ありません。まず、 を捨てて、代わりにSimpleCursorAdapter拡張BaseAdapterします。私がそう言う理由は、BaseAdapterあなたには active が必要ないからCursorです。そのため、SQL でデータを操作しようとする代わりに、Java で作業を行うことができ、大きな頭痛の種から解放されます。

  • 最初のクエリを実行します (イベント ID でグループ化)
  • すべての結果をループし、名前を文字列に追加します (カンマ区切り)
  • eventId が変更されたら、文字列をコンテナにダンプし、新しいコンテナを開始します
  • データのコンテナをBaseAdapter

Eventおそらく、id と名前を一緒に保持するためのオブジェクトが必要になるでしょう。Event次に、それぞれを ArrayList に追加して、それをアダプターに渡すことができます。

于 2012-11-01T13:46:35.447 に答える