Mysql查询在qt中不起作用

Mysql查询在qt中不起作用,mysql,qt,Mysql,Qt,我已经编写了一个非常复杂的mysql查询,并在mysql工作台上进行了测试,效果非常好。但是当我在qt程序中使用这个查询时,它不起作用 为了获得更好的分辨率,我有3个表products、categories、products\u categories,我想获取parentId=5的3个category和每个类别的2个product。以下是我的功能: void DbQueries::getFullCategories(int parent_id, int offset, int limit, in

我已经编写了一个非常复杂的mysql查询,并在mysql工作台上进行了测试,效果非常好。但是当我在qt程序中使用这个查询时,它不起作用

为了获得更好的分辨率,我有3个表products、categories、products\u categories,我想获取parentId=5的3个category和每个类别的2个product。以下是我的功能:

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();

    ...
}

我得到了mysql错误,比如:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“b,从parentId=5 LIMIT 3 OFFSE”附近使用的正确语法QMYSQL:无法执行查询此查询缺少一些重要的空白:

      "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"
修复非常简单:

      "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"
      -^-

这有点乱。重新开始。看看
      "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"
      -^-