简体   繁体   English

Symfony 查询生成器(子查询)

[英]Symfony Query Builder (Subquery)

How would this SQL query look in the Query Builder?这个 SQL 查询在查询生成器中的外观如何? Unfortunately, subselects are not possible, right?不幸的是,子选择是不可能的,对吧?

SQL: SQL:

SELECT t.* FROM domain_check_result AS t
INNER JOIN (SELECT *, MAX(checkDate) AS MaxDate
FROM domain_check_result
GROUP BY domain_id) AS tm ON t.domain_id = tm.domain_id AND t.checkDate = tm.MaxDate

To pick latest result from your group (domains) you can rewrite your query as below and it would be easier to translate this query in DQL and query builder要从您的组(域)中选择最新结果,您可以如下重写您的查询,并且在 DQL 和查询生成器中翻译此查询会更容易

SQL SQL

SELECT 
  a.* 
FROM
  domain_check_result a 
  LEFT JOIN domain_check_result b 
    ON a.domain_id = b.domain_id 
    AND a.checkDate < b.checkDate 
WHERE b.checkDate IS NULL 
ORDER BY a.checkDate DESC 

DQL DQL

SELECT a 
FROM AppBundle\Entity\DomainCheckResult a
    LEFT JOIN AppBundle\Entity\DomainCheckResult b 
    WITH a.domain = b.domain 
    AND a.checkDate < b.checkDate
WHERE b.checkDate IS NULL
ORDER BY a.checkDate DESC

And in query you could translate your DQL as在查询中,您可以将您的 DQL 翻译为

$repo = $DM->getRepository( 'AppBundle\Entity\DomainCheckResult' );
$results = $repo->createQueryBuilder( 'a' )
                ->select( 'a' )
                ->leftJoin(
                    'AppBundle\Entity\DomainCheckResult',
                    'b',
                    'WITH',
                    'a.domain = b.domain AND a.checkDate < b.checkDate'
                )
                ->where( 'b.checkDate IS NULL' )
                ->orderBy( 'a.checkDate','DESC' )
                ->getQuery()
                ->getResult();

Reference: Doctrine Query Language get Max/Latest Row Per Group参考:Doctrine Query Language get Max/Latest Row Per Group

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM