我正在尝试使用此查询:
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/