gpt4 book ai didi

php - 如何将 "distinct on"与学说一起使用?

转载 作者:行者123 更新时间:2023-12-05 08:13:04 25 4
gpt4 key购买 nike

我尝试在 doctrine 中使用“distinct on”,但出现以下错误:

Error: Expected known function, got 'on'

class Report extends EntityRepository
{
public function findForList() {
$queryBuilder = $this->createQueryBuilder('r');
$queryBuilder->select('distinct on (r.parentId)')
->orderBy('r.parentId')
->orderBy('r.date', 'DESC');

return $queryBuilder->getQuery()->getResult();
}
}

我如何实现以下查询?

select distinct on (r.parent_id)
r.parent_id,
r.id,
r.name
from frontend.report r
order by r.parent_id, r.date desc;

显然,使用查询构建器似乎无法做到这一点。我尝试以不同的方式重写我的查询:

select * from frontend.report r
where
r.id in (
select distinct
(select r3.id from frontend.report r3
where r3.parent_id = r.parent_id
order by r3.date desc limit 1) AS id
from frontend.report r2);

但学说不支持 LIMIT:

public function findForList() {
$qb3 = $this->_em->createQueryBuilder();
$qb3->select('r3.id')
->from('MyBundle:frontend\report', 'r3')
->where('r3.parentId = r2.parentId')
->orderBy('r3.date', 'DESC')
//->setMaxResults(1)
;

$qb2 = $this->_em->createQueryBuilder();
$qb2->select('(' . $qb3->getDql() . ' LIMIT 1)')
->from('MyBundle:frontend\report', 'r2')
->distinct(); // groupBy('r2.parentId')

$queryBuilder = $this->createQueryBuilder('r');
$queryBuilder->where(
$queryBuilder->expr()->in('rlt.id', $qb2->getDql())
);

return $queryBuilder->getQuery()->getResult();
}

我认为唯一的解决方案是使用原生 SQL 查询。

最佳答案

此回复适用于还在类似情况下寻找解决方案的人。如果您需要示例“DISTINCT”,您可以使用:

$queryBuinder->select('parentId')
->distinct('parentId');

但如果您想要“DISTINCT ON”,您应该使用 Native SQL 而不是 Query Builder,请在此处查看手册:Doctrine Native SQL

关于php - 如何将 "distinct on"与学说一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com