我正在尝试使用此查询:
MySQL SELECT DISTINCT by highest value

    SELECT
    p.*
FROM
      product p
    INNER JOIN
        ( SELECT
              magazine, MAX(onSale) AS latest
          FROM
              product
          GROUP BY
              magazine
        ) AS groupedp
      ON  groupedp.magazine = p.magazine
      AND groupedp.latest = p.onSale ;

在 Symfony2 和 DQL 中。

我有:
$query = $em->createQuery("SELECT p FROM MyBundle:Product p WHERE p.type = 'magazine' AND  p.maglink IS NOT NULL OR (p.type = 'magazine' AND  p.diglink IS NOT NULL) GROUP BY p.magazine ORDER BY p.onSale DESC");

哪个工作正常并输出对象但没有正确的 MAX(onSale)
正在做:
 $query = $em->createQuery("SELECT p , MAX(p.onSale) FROM MyBundle:Product p WHERE p.type = 'magazine' AND  p.maglink IS NOT NULL OR (p.type = 'magazine' AND  p.diglink IS NOT NULL) GROUP BY p.magazine ORDER BY p.onSale DESC");

导致返回非对象。

这:
$query = $em->createQuery("SELECT
            p.*
            FROM
            MyBundle:Product p
            INNER JOIN
            ( SELECT
                    p.magazine, MAX(onSale) AS p.latest
                    FROM
                    MyBundle:Product p
                    GROUP BY
                    p.magazine
            ) AS groupedp
            ON  groupedp.magazine = p.magazine
            AND groupedp.latest = p.onSale ;");

抛出这个错误:
[语义错误] 第 0 行,'SELECT 附近的第 127 列
':错误:标识变量(在连接路径表达式中使用但之前未定义。

我认为由于这个 Symfony2 Doctrine query

我如何维护我的映射,同时仍然能够按销售对每个项目进行排序?

最佳答案

您是否考虑过将其拆分为两个查询:

首先 :
直接针对数据库连接运行查询,并按所需顺序返回相关行的 ID。这将您的复杂查询与 DQL 分开。

第二个 :
根据上一个查询的 ID/顺序,通过 Doctrine 查询行以获取您想要的完整实体。

关于子选择上的 Symfony2 Doctrine SQL 对象映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11610742/

10-13 06:43