嵌套SubQuery中的错误在DQL中:类'('未定义

时间:2014-07-06 21:23:48

标签: php mysql doctrine-orm doctrine dql

我有一个DQL,如下所示:

SELECT at, count(at.id) FROM AccountTriple at JOIN at.property p JOIN at.account ac WHERE p.create_analytics = '1' GROUP BY at.property, at.value, ac.service

如您所见,它有三个连接。作为' at'和' ac'两者都有大量的数据。为了优化它,我试图移动" p.create_analytics =' 1'""在加入' ac'之前检查给它一个较小的数据集来加入。我正在努力实现这样的目标:

SELECT at, count(at.id) FROM ( SELECT at FROM AccountTriple at JOIN at.property p WHERE p.create_analytics = '1' ) JOIN at.account ac  GROUP BY at.property, at.value, ac.service

但不知何故,我的语法不起作用。错误消息显示如下:

  

语义错误]第0行,第29列靠近'(选择FROM':错误:类'('未定义。

在其他地方也没有找到类似的例子。有没有人可以帮助修复此DQL查询以使其正常工作?提前谢谢。

1 个答案:

答案 0 :(得分:5)

使用createSubquery()函数在Doctrine中创建子查询。然后,您可以将子查询嵌套到主查询中。

实施例

// build root query
$query = Doctrine_Query::create()
  ->from('Movie m')
  ->where('name = ?', 'Prometheus')
;

// build subquery
$subquery = $query->createSubquery()
  ->from('SeenMovie sm')
  ->where('m.name = sm.name')
;

// nest subquery and execute
$query->where('EXISTS (' . $subquery->getDql() . ')')->execute();

进一步阅读
A Bulletproof Pattern for Creating Doctrine Subqueries of Any Complexity