我正在尝试使用此查询: 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行,第127行靠近'SELECT ':错误:标识变量(用于连接路径表达式,但之前未定义。
我假设由于这个Symfony2 Doctrine query
如何在仍然可以按onsale对每个项目进行排序的同时保持我的映射?
答案 0 :(得分:1)
您是否考虑将此分为两个查询:
<强>第一强>: 直接针对数据库连接运行查询,并按所需顺序返回相关行的ID。这会将您的复杂查询与DQL分开。
<强>第二强>: 根据Doctrine查询行,根据前一个查询的ID /顺序获取所需的完整实体。
答案 1 :(得分:1)
这是一个黑暗中的镜头,但似乎相当明显。您将两个表别名到同一个别名。因此当你使用p。在连接中,它认为您在连接之前从p的原始定义开始工作,然后将连接别名为p。更改连接的别名(以及对该表的引用),以便每个别名都是唯一的。