かなり複雑なmysqlクエリを作成し、mysqlワークベンチでテストしました。しかし、私のqtプログラムでこのクエリを使用すると、動作しません。QtでMysqlクエリが動作しない
私は3つのテーブル(製品、カテゴリ、products_categories)を持っており、parentId = 5の3つのカテゴリと各カテゴリの2つの製品を取得したいと考えています。 exec()
後、私はエラーを取得していないが、私のQSqlRecord
でフェッチレコードがない、このクエリでは
void DbQueries::getFullCategories(int parent_id, int offset, int limit, int plimit)
{
...
QSqlQuery q;
q.prepare("set @num := 0, @cid := '';"
"SELECT e.ProductId, e.title, e.price, e.rate, e.rateAvg, e.imgUrl, d.cid, d.ctitle"
"FROM products e,"
"(SELECT ProductId, @num := if(@cid = categoryId, @num + 1, 1) as qty, @cid := categoryId as cid, title as ctitle"
"FROM ("
"SELECT b.ProductId, b.categoryId, a.title"
"FROM products_categories b, (SELECT catId, title FROM categories WHERE parentId = :parent_id LIMIT :limit OFFSET :offset) as a"
"WHERE b.categoryId = a.catId"
"ORDER BY b.categoryId"
") as c"
") as d"
"WHERE e.ProductId = d.ProductId AND d.qty <= :plimit"
"ORDER BY d.cid;");
q.bindValue(":parent_id", parent_id);
q.bindValue(":limit", limit);
q.bindValue(":offset", offset);
q.bindValue(":plimit", plimit);
if(!q.exec())
qDebug() << q.lastError().text();
const QSqlRecord &r = q.record();
qDebug() << r.count();
...
}
:ここに私の関数です。私はを:=
の前に入れようとしましたが、私はUnknown escape sequence '\:'
を得ました。
そして、私はこれに私のクエリを削減する場合:
QSqlQuery q;
q.prepare("SELECT b.ProductId, b.categoryId, a.title"
"FROM products_categories b, (SELECT catId, title FROM categories WHERE parentId = :parent_id LIMIT :limit OFFSET :offset) as a"
"WHERE b.categoryId = a.catId"
"ORDER BY b.categoryId");
I得たようにmysqlのエラー:
"SELECT b.ProductId, b.categoryId, a.title"
"FROM products_categories b, (SELECT catId, title FROM categories WHERE parentId = :parent_id LIMIT :limit OFFSET :offset) as a"
"WHERE b.categoryId = a.catId"
"ORDER BY b.categoryId"
修正が本当にある:このクエリは、不足しているいくつかの重要な空白があり"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b, (SELECT catId, title FROM categories WHERE parentId = 5 LIMIT 3 OFFSE' at line 1 QMYSQL: Unable to execute query"
これはちょっと混乱しています。やり直してください。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-を参照してください。クエリ – Strawberry