学習ツールとしてアプリを作成していますが、結合クエリに問題があります。
次のように宣言された馬とカバーの2つのテーブルを持つデータベースがあります。
private static final String HORSES_CREATE = "create table horses (_id integer primary key autoincrement, "
+ "name text not null, type integer not null, birthDate text not null, vaccineDate text not null, "
+ "inFoal integer not null, notes text not null);";
「タイプ」フィールドは、種牡馬、牝馬、去勢馬などを指し、スピナーから選択されます (XML 文字列配列から取り込まれます)。
private static final String COVERS_CREATE = "create table covers (_id integer primary key autoincrement, "
+ "stallionName integer not null, mareName integer not null, firstCoverDate text not null, lastCoverDate text not null, "
+ "scan14Date text not null, scan28Date text not null, foalingDate text not null, inFoal integer not null, notes text not null);";
StallionName は、実際には horse テーブルの馬の _id フィールドとして格納されます。これは、馬のテーブルでタイプが「Stallion」として定義されている馬のみを表示するスピナーから選択されます。(マーレも同様)。
テーブルを作成およびアップグレードするためのクラス「DatabaseHelper」があり、各テーブルには独自のアダプタークラス「horsesDbAdapter」および「coversDbAdapter」があり、エントリを追加、編集、削除するメソッドと関連するクエリが含まれています。(fetchAllHorses()、fetchHorse(long rowId) )
例えば:
public Cursor fetchAllHorses() {
return mDb.query(DATABASE_TABLE,
new String[] { KEY_ROWID, KEY_NAME, KEY_TYPE, KEY_BIRTHDATE,
KEY_VACCINEDATE, KEY_INFOAL, KEY_NOTES }, null, null,
null, null, null);
}
(これはすべて Android のメモ帳の例を基にしています)
カバー テーブルの内容をリストビューに表示しています (stalionName と mareName のみを表示しています)。しかし、これらのフィールドには horses テーブルへの一意の参照が含まれているだけなので、表示されるのはかなり情報量の少ない _id フィールドだけです。
私の質問は; listView に表示する馬に関連する名前を取得するにはどうすればよいですか? 結合クエリなどを読みましたが、それらを実装しようとすると迷子になります。horses._id と covers.stallionName に参加する必要があると思います (その後、MareName とほぼ同じものを作成します) が、これを行う方法の具体的な例が見つかりません。
追加情報/コードが必要な場合はお知らせください。
どんな助けでも大歓迎です、事前に感謝します。
編集: horses テーブルで (_id) を参照する StallionName と mareName の外部キーを作成しましたが、結合クエリを実装する方法と場所がまだわかりません。horsesDbAdapter、coversDbAdapter、または coversList クラスにある必要がありますか? (coversList は、listView を作成して設定するクラスです) カバー テーブルの宣言は次のようになります。
private static final String COVERS_CREATE = "create table covers (_id integer primary key autoincrement, "
+ "stallionName integer not null, mareName integer not null, firstCoverDate text not null, lastCoverDate text not null, "
+ "scan14Date text not null, scan28Date text not null, foalingDate text not null, inFoal integer not null, notes text not null," +
"FOREIGN KEY (stallionName) REFERENCES horses (_id), FOREIGN KEY (mareName) REFERENCES horses (_id));";