0
我有一個查詢語句來選擇一個工具列表。這些工具需要放入2D矢量中,其中第一級是類別,第二級是類別的「桶」。使用Qt構建一個來自mysql查詢的2D矢量
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);
}
您看到什麼低效率? –
@PavelZdenek看我的編輯。它是循環中的if語句。我決定在category_id中首先使用SELECT DISTINCT創建桶可能更好,然後再執行另一個查詢來實際獲取所有工具。只要兩個查詢按category_id排序結果,它們就會落入正確的桶中。 – rem45acp