加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Doctrine上的复杂SQL查询

发布时间:2020-12-13 16:52:20 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用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 YE
我正在尝试使用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-&gt;semanticalError('Class '(' is no...',Array)
#2 C:xampphtdocspatclinappDoctrineORMQueryParser.php(1529): 
DoctrineORMQueryParser-&gt;AbstractSchemaName()
#3 C:xampphtdocspatclinappDoctrineORMQueryParser.php(1426): 
DoctrineORMQueryParser-&gt;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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读