2017-02-16 16 views
0

かなり複雑な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"

+0

これはちょっと混乱しています。やり直してください。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-を参照してください。クエリ – Strawberry

答えて

1

単純:

 "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" 
     -^- 
関連する問題