如何使用 Doctrine 查询语言高效查找每组的最大或最新行?

Barbara Streisand
发布: 2024-11-20 19:00:20
原创
851 人浏览过

How to Efficiently Find the Maximum or Latest Row Per Group Using Doctrine Query Language?

Doctrine 查询语言:查找每组的最大或最新行

在某些数据库操作中,需要查询最大或最新的行一组数据中的行。要将执行此类操作的 SQL 语句转换为 Doctrine Query Language (DQL),您必须利用特定的技术。

一种常见的 SQL 技术是使用子查询来确定组内的最高或最新值,然后加入包含这些结果的主查询。然而,当涉及到 Doctrine 时,这种方法可能会变得复杂。

另一种解决方案是重写 SQL 语句以避免使用聚合函数。例如,要查找每个名称的最高分数,您可以使用以下 SQL 语句:

SELECT 
  a.* 
FROM
  score a 
  LEFT JOIN score b 
    ON a.name = b.name 
    AND a.score < b.score 
WHERE b.score IS NULL 
ORDER BY a.score DESC 
登录后复制

此查询从分数表中选择没有为同一名称记录更高分数的所有行。

要将 SQL 语句翻译为 DQL,可以这样写:

SELECT a 
FROM AppBundle\Entity\Score a
    LEFT JOIN AppBundle\Entity\Score b 
    WITH a.name = b.name 
    AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC
登录后复制

也可以使用 Doctrine 中的查询构建器 API 来构造查询:

$DM   = $this->get( 'Doctrine' )->getManager();
$repo = $DM->getRepository( 'AppBundle\Entity\Score' );
$results = $repo->createQueryBuilder( 'a' )
                ->select( 'a' )
                ->leftJoin(
                    'AppBundle\Entity\Score',
                    'b',
                    'WITH',
                    'a.name = b.name AND a.score < b.score'
                )
                ->where( 'b.score IS NULL' )
                ->orderBy( 'a.score','DESC' )
                ->getQuery()
                ->getResult();
登录后复制

这提供了一种有效的方法来使用 Doctrine 执行与原始 SQL 语句相同的操作。

以上是如何使用 Doctrine 查询语言高效查找每组的最大或最新行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板