I have a DQL as like below:
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
As you can see, it has three joins. As 'at' and 'ac' both have large amount of data. In attempt to optimize it, I am trying to move the "p.create_analytics = '1'" checking before join to 'ac' to give it a smaller data set to join. I am trying to achieve something like this:
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
But somehow, my syntax isn't working. A error message is showing as below:
Semantical Error] line 0, col 29 near '( SELECT at FROM': Error: Class '(' is not defined.
Didn't find similar example anywhere else as well. Does anyone can help to fix this DQL query to get working? Thanks in advance.
Use the
createSubquery()
function to create a subquery in Doctrine. You can then nest the subquery into your main query.Example
Further Reading
A Bulletproof Pattern for Creating Doctrine Subqueries of Any Complexity