私のジレンマは、外部キーテーブルにアクセスするときにプライマリテーブルからResultSetを失うことです。別のテーブルをクエリするときに、最初のテーブルクエリの結果を保存する必要があります。
Scenerio:
レシピデータベースシステムを実装しています。各レシピには、1つから多くの材料を含めることができます。1対多の関係を解決するために、材料用に別のテーブルを作成しました。
私はレシピの表を持っています:
ID_Recipe: primary key, integer;
Recipe_Title: CHAR(128);
そして材料の表:
ID_Ingredient: PRIMARY KEY, INTEGER;
ID_Recipe: INTEGER NOT NULL;
Ingredient_Title: CHAR(64)
私のプログラムには、材料のベクトルを含むレシピオブジェクトがあります。
struct Ingredient
{
int ID;
int recipe_ID;
std::string title;
};
struct Recipe
{
int ID;
std::string title;
std::vector<Ingredient> recipe_ingredients;
};
テーブル内のレシピで各反復に対してを実行するには、データベースからレシピをロードする必要があります。レシピを完成させるには、レシピに関連するすべての材料をロードする必要があります。
問題は、材料をロードすると、レシピの結果セットが失われることです。MySQLコネクタC++は、一度に1つの結果セットのみを処理できます。結果をコピーすることもできませんでした(テーブルのサイズが大きくなると、結果全体をロードしたくない場合があります)。
では、材料テーブルから検索してロードするときに、レシピテーブルへのカーソルまたはポインタを維持するにはどうすればよいですか?
これが私がやりたいことです:
- 表のレシピごとに、次のことを行います。
- レシピ結果の行データをレシピ変数に読み込みます。
- レシピIDを使用して、Recipe.ID_Recipe=Ingredient.ID_Recipeであるすべての材料を選択します。
- 材料テーブルからレシピ変数のベクトルに結果をロードします。
- レシピオブジェクトをコールバック関数に渡します。
- 表の次のレシピに進みます。
- End-for
提案を事前に感謝します。
(MySQL、MySQL Connector C ++、Visual Studio 2008-C ++を使用しています)