Mysql 迭代1到多个表时丢失结果

Mysql 迭代1到多个表时丢失结果,mysql,database,mysql-connector,Mysql,Database,Mysql Connector,我的困境是,当访问外键表时,我将丢失主表中的ResultSet。我需要在查询另一个表时保存第一个表查询的结果 场景: 我正在实现一个配方数据库系统。每个食谱可以有1到多个成分。为了解决1对多的关系,我为成分创建了一个单独的表 我有一张食谱表: ID_Recipe: primary key, integer; Recipe_Title: CHAR(128); 和一份配料表: ID_Ingredient: PRIMARY KEY, INTEGER; ID_Recipe: IN

我的困境是,当访问外键表时,我将丢失主表中的ResultSet。我需要在查询另一个表时保存第一个表查询的结果

场景:
我正在实现一个配方数据库系统。每个食谱可以有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;
};
struct成分
{
int-ID;
int recipe_ID;
std::字符串标题;
};
结构配方
{
int-ID;
std::字符串标题;
std::载体配方_成分;
};
为了对表中的配方执行for-each迭代,我必须从数据库中加载它。为了完成配方,我必须加载与配方相关的所有成分

问题是,当我加载配料时,我会丢失配方的结果集。MySQL连接器C++只能一次处理一个结果集。我也没有幸复制结果(当表大小增大时,我可能不想加载整个结果)

那么,当我从配料表搜索和加载时,如何维护指向配方表的光标或指针

以下是我想做的:

  • 对于表中的每个配方,请执行以下操作:
  • 将配方结果行数据读入 配方变量
  • 使用配方ID选择所有配方 配方中包含的配料。ID\u配方= 配料。配方
  • 从配料表加载结果 转化为配方变量的向量
  • 传递recipe对象以回调 功能
  • 前进到表中的下一个配方
  • 结束
  • 提前感谢您的建议。

    (我使用MySQL、MySQL连接器C++、Visual Studio 2008 -C++)

    < P>只返回一个结果集。有一列(或多列)称为配方,每种成分保持不变。加入

    乙二醇

    select*从配方左侧加入配方。ID_配方=ingr。ID_配方


    这会给你一张桌子,你可以绕过去。。。当配方名称更改时,您就知道您正在使用新配方。

    AFAICT,MySQL Connector/C++文档中没有任何内容表明打开第二个结果集会使第一个结果集无效。请发布用于处理行的代码。您可能正在做一些过早关闭第一个结果集的事情。

    对于一对多关系,实际上不需要连接表。但在你的例子中,这是一种多对多的关系,因为一种成分可以用于多种食谱,不是吗?这是一种简化的表示。我有一张所有配料的桌子。有一个表将配方ID映射到配料ID,因此主键是component,recipe ID+配料ID。这允许在不复制所有配方属性的情况下查找与配方关联的所有配料。我编写了一些简单的测试代码,使用不同的结果集访问不同的表。这段代码没有问题。然后我修改了我的配方程序,现在它工作了。虽然这是一个很好的解决方案,但这可能会很慢,因为还必须检查每个配方名称字段。我不认为这比执行多个服务器查询的开销慢(非常慢)。但我很高兴你找到了你的错误。