使用多个 SELECT 在 Doctrine CreateQueryBuilder 上获取语法错误
Posted
技术标签:
【中文标题】使用多个 SELECT 在 Doctrine CreateQueryBuilder 上获取语法错误【英文标题】:Getting a Syntax error on Doctrine CreateQueryBuilder with multiple SELECT 【发布时间】:2019-12-02 05:13:42 【问题描述】:我在下面有这个查询,它按预期返回所有内容。但是,运行时我得到一个学说语法错误,但我无法精确定位它。在 Doctrine 中添加多个选择有什么特殊的方法吗?
这是我的功能。
public function summaryReport()
$qb = $this->createQueryBuilder('ds')
->select('ds.d_id, ds.d_name,
SUM(ds.c_email IS NOT NULL) * 100.00 / COUNT(c_number) AS percentage,
COUNT(DISTINCT ds.c_number) AS Qualifying_customers,
sum(ds.c_email IS not NULL) AS Qualifying_Customers_with_Email')
->groupBy('ds.d_id, ds.d_name')
->getQuery();
dd($qb->getDQL());
return $qb->getResult();
我收到的错误是
Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got 'IS'
addSelect 会将它们分开吗?
【问题讨论】:
【参考方案1】:SUM(ds.c_email IS NOT NULL)
在这里不正确。
SUM函数定义为"SUM" "(" ["DISTINCT"] StringPrimary ")"
,这里的条件不接受。
如果您希望NOT NULL
条件返回 1 或 0,则必须使用 IF
函数。例如:SUM(IF(ds.c_email IS NOT NULL, 1, 0))
【讨论】:
谢谢亚历山德罗,这不是为我做的。下面的答案确实如此。【参考方案2】:这是通过的查询
public function summaryReport()
$qb = $this->createQueryBuilder('ds')
->select('ds.d_id, ds.d_name,
(sum(case when ds.c_email IS null then 0 else 1 end))*100/count(ds.c_number) as percentage')
->addSelect('COUNT(DISTINCT ds.c_number) AS qualifying')
->addSelect('sum(case when ds.c_email IS NULL then 0 else 1 end) AS qualifyingEmail')
->groupBy('ds.d_id, ds.d_name')
->getQuery();
return $qb->getResult();
【讨论】:
以上是关于使用多个 SELECT 在 Doctrine CreateQueryBuilder 上获取语法错误的主要内容,如果未能解决你的问题,请参考以下文章
Doctrine MongoDB ODM 在两个或多个字段中搜索
使用 Doctrine2 和 PostgreSQL 进行多数据库模式和迁移
避免使用Doctrine DBAL查询构建器select语句将驼峰别名名称转换为小写