我正在尝试使用Doctrine 2实现复杂的SQL查询. 但是,我的SQL查询有子选择.我认为这是’问题,但我无法实现解决这个问题的方法.
SELECT
x.year, x.month, y.total
FROM
(SELECT
YEAR(a.date) year, MONTH(a.date) month, count(*) number
FROM
Acessos a
GROUP BY
YEAR(a.date), MONTH(a.date)) x
INNER JOIN
(SELECT
MAX(Z.number) total
FROM
(SELECT
COUNT(a.id) number
FROM
Acessos a
GROUP BY
YEAR(a.date), MONTH(a.date)) z) y ON x.number = y.total LIMIT 1
当我把这个查询运行到trhu代码时,我得到一个QueryException.
<b>Fatal error</b>: Uncaught exception 'DoctrineORMQueryQueryException'
with message 'SELECT x.messelecionado, x.anoselecionado, y.total from (select
month(a.data) messelecionado, year(a.data) anoselecionado, count(*) numero from
Acesso a group by month(a.data), year(a.data)) x inner join (select max(z.numero)
total from (select count(a.id) numero from Acesso a group by month(a.data),
year(a.data)) z) y on x.numero = y.total limit 1' in
C:xampphtdocspatclinappDoctrineORMQueryQueryException.PHP:39
Stack trace:
#0 C:xampphtdocspatclinappDoctrineORMQueryParser.PHP(429):
DoctrineORMQueryQueryException::dqlError('SELECT x.messel...')
#1 C:xampphtdocspatclinappDoctrineORMQueryParser.PHP(854):
DoctrineORMQueryParser->semanticalError('Class '(' is no...', Array)
#2 C:xampphtdocspatclinappDoctrineORMQueryParser.PHP(1529):
DoctrineORMQueryParser->AbstractSchemaName()
#3 C:xampphtdocspatclinappDoctrineORMQueryParser.PHP(1426):
DoctrineORMQueryParser->RangeVariableDeclaration()
#4 C:x in <b>C:xampphtdocspatclinappDoctrineORMQueryQueryException.PHP</b>
on line <b>49</b><br />
谁知道我该怎么办?
谢谢!!! 解决方法: 您使用group by子句编写的YEAR函数不会被学说理解.你必须为此注册自定义dql函数. 这是doctrine提供的dql函数列表: http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#dql-functions
这是创建自己的dql函数的链接 http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#adding-your-own-functions-to-the-dql-language
groupby也只使用聚合函数(AVG,COUNT,MIN,MAX,SUM)
此链接可能对您有所帮助 Group by using month, year in doctrine2 (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|