我有一个选择工具列表的查询语句。这些工具需要放入一个二维向量中,其中第一级是它的类别,第二级是类别的“桶”。
struct Tool {};
typedef boost::shared_ptr< Tool > ToolPtr;
typedef std::vector< ToolPtr > ToolVec;
typedef std::vector< ToolVec > ToolCategory;
查询语句如下所示:
const QString getTools =
"SELECT tool_id, category_id, category_name, tool_name FROM tool_relation "
"WHERE course_id = ? ORDER BY category_id ASC, tool_id ASC";
q.bindValue(0, courseID);
q.exec();
while (q.next())
{
}
我想用一个查询语句来做到这一点,但我能想到的唯一方法是使用指向正确存储桶的临时指针并测试每条记录以查看类别 ID 是否更改。似乎效率低下。
编辑:这样的事情是我只使用一个查询语句时想出的。
ToolVector *curBucket = 0;
int curCategory = 0;
while (q.next())
{
if (q.value(1).toInt() != curCategory)
{
curCategory = q.value(1).toInt();
ToolVec toolVec;
curBucket = &toolVec;
categories.push_back(toolVec);
}
ToolPtr toolPtr(new Tool(
q.value(0).toInt(),
q.value(2).toString()));
curBucket->push_back(toolPtr);
}