Mysql 迭代1到多个表时丢失结果
我的困境是,当访问外键表时,我将丢失主表中的ResultSet。我需要在查询另一个表时保存第一个表查询的结果 场景: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
我正在实现一个配方数据库系统。每个食谱可以有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++只能一次处理一个结果集。我也没有幸复制结果(当表大小增大时,我可能不想加载整个结果)
那么,当我从配料表搜索和加载时,如何维护指向配方表的光标或指针
以下是我想做的:
(我使用MySQL、MySQL连接器C++、Visual Studio 2008 -C++)< P>只返回一个结果集。有一列(或多列)称为配方,每种成分保持不变。加入 乙二醇
select*从配方左侧加入配方。ID_配方=ingr。ID_配方
这会给你一张桌子,你可以绕过去。。。当配方名称更改时,您就知道您正在使用新配方。AFAICT,MySQL Connector/C++文档中没有任何内容表明打开第二个结果集会使第一个结果集无效。请发布用于处理行的代码。您可能正在做一些过早关闭第一个结果集的事情。对于一对多关系,实际上不需要连接表。但在你的例子中,这是一种多对多的关系,因为一种成分可以用于多种食谱,不是吗?这是一种简化的表示。我有一张所有配料的桌子。有一个表将配方ID映射到配料ID,因此主键是component,recipe ID+配料ID。这允许在不复制所有配方属性的情况下查找与配方关联的所有配料。我编写了一些简单的测试代码,使用不同的结果集访问不同的表。这段代码没有问题。然后我修改了我的配方程序,现在它工作了。虽然这是一个很好的解决方案,但这可能会很慢,因为还必须检查每个配方名称字段。我不认为这比执行多个服务器查询的开销慢(非常慢)。但我很高兴你找到了你的错误。