エントリには複数のユーザーがいる可能性があるため、USER
3つのテーブルENTRY
(入力された製品の場合、PRODUCTテーブルを作成する必要はありません)と、USER_COLLECTION
との間のテーブルがあります。USER
ENTRY
基本的に:
ユーザー=USERID | USER_NAME
エントリ=ENTRYID | ENTRY_NAME | ENTRYPRICE | ENTRY_DATE
コレクション=COLLECTIONID | ENTRYID | USERID
プロジェクト全体を通して存続するユーザーのテーブルがあります。エントリ(通常は価格のある製品の一種)を作成し、複数のユーザーを特定のエントリ(リストから選択できるため、ユーザーはプロジェクト全体で存続します)にリンクできます。
たとえば、私のテーブルは次のようになります。
User
--------------------------
user_id | user_name
--------------------------
1 | 'FOO'
2 | 'BAR'
3 | 'FOOBAR'
ENTRY
-----------------------------------------------------------------------
entryid | entry_name | entry_price | entry_date
-----------------------------------------------------------------------
0 | 'Banana' | 2.50 | 12/12/2012
COLLECTION
---------------------------------------
collectionid | entryid | userid
----------------------------------------
0 | 1 | 1
1 | 1 | 2
2 | 1 | 3
私はバナナを持っています。価格は2.50で、Foo、Bar、Foobarの3人のユーザーがリンクしています。
今、私はこれを私のアプリで使用してデータを取得したいと思います。どこから始めればいいのかわからないことを除いて。そのIDを使用してコレクションデータをループしてエントリデータを選択しようとしましたが、2つのカーソルが開いていて、機能しませんでした。結合を作成しようとしましたが、主に次の理由で、実際に良い結合を作成できませんでした。
JOIN
---------------------------------------
collectionid | entryname | username
----------------------------------------
0 | Banana | FOO
1 | Banana | BAR
2 | Banana | FOOBAR
Androidコードで同じエントリオブジェクトを複数作成するため、これを繰り返すことはできません...
私がこれを明確にしていることを願っています。
if (cursor2.moveToFirst()) {
do {
Item i = new Item(<GET STUFF FROM CURSOR>);
i.addUser(new Person(<GET STUFF FROM CURSOR>)));
Log.d("TAG", i.getUsersPaying().size() + "");
} while (cursor2.moveToNext());
}
これを使用すると、アイテムiの複数のインスタンスを作成します。それらはすべてバナナになりますが、複数のユーザーが追加されたバナナは1つだけにする必要があります。