所以,也许它可以帮助某人。
在第一种情况下,我找到并使用了两种方法: 1. 在 sql 函数中对 concat 进行分组,在 c++ 中进行反序列化。如果 table2 只有 table1_id 和另一个整数,它会很快。2. 我调用了两个函数:get_table1() 和 get_table2(),按 table1_id 排序。然后用两个指针创建 table1 数组:
std::vector<Table1> table1Array;
auto ap = wrk.prepared(GetTable1FuncName).exec();
auto aps = wrk.prepared(GetTable2FuncName).exec();
auto pos = aps.begin();
for (auto row = ap.begin(); row != ap.end(); ++row) {
std::vector<Table2> table2Array;
while (pos != aps.end()
&& row["table1_id"].as(int()) == pos["table1_id"].as(int())) {
table2Array.push_back(Table2(pos["first_id"].as(int()),
pos["second_string"].as(std::string())));
++pos;
}
Table1 tb1(row["table1_id"].as(int()), row["column2"].as(int()),
row["column3"].as(int()), row["column4"].as(int()),
table2Array);
table1Array.push_back(tb1);
}
可能它不漂亮,但它正在工作。插入我为一个元素编写的数据库。先插入Table1,多行后插入Table2。通话后pqxx::work.commit()
。
在第二种情况下,不,不存在。还要记住,函数总是返回 1 行!当心!