【问题标题】:How can I SELECT rows with MAX(Column value) in DQL?如何在 DQL 中选择具有 MAX(列值)的行?
【发布时间】:2016-11-18 13:45:28
【问题描述】:

我无法在我拥有的 symfony2 项目中获取此查询。

我的桌子:

id  course  datetime    numOrden   
---|-----|------------|--------
1  | 1º  | 04/11/2016 | 1   
2  | 2º  | 04/11/2016 | 2
5  | 3º  | 04/11/2016 | 5  
3  | 4º  | 03/11/2016 | 4   
4  | 5º  | 03/11/2016 | 3 

我需要获取“numOrden”列中的值为最大值的课程(在这种情况下,它将是第 3 门课程)。为此,我在 Doctrine2 中使用了以下查询:

public function findCourse()
{
    return $this->getEntityManager()->createQuery(
    'SELECT c FROM BackendBundle:Curso c WHERE c.numOrden in (SELECT max(c.numOrden) FROM BackendBundle:Curso )')
    ->getResult();
}

或者

    public function findCourse()
{
    return $this->getEntityManager()->createQuery(
    'SELECT c FROM Bundle:Course c WHERE c.numOrden=(SELECT max(c.numOrden) FROM Bundle:Course )')
    ->getResult();
}

但它显示以下错误:

[Syntax Error] line 0, col -1: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got end of string. (500 Internal Server Error)  

【问题讨论】:

    标签: sql doctrine-orm dql


    【解决方案1】:

    尝试在子选择中使用另一个别名:

        public function findCourse()
    {
        return $this->getEntityManager()->createQuery(
        'SELECT c FROM Bundle:Course c WHERE c.numOrden=(SELECT max(co.numOrden) FROM Bundle:Course co )')
        ->getResult();
    }
    

    希望有帮助

    【讨论】:

    • 这就是问题所在。我以前尝试过相同的别名,但我没有尝试另一个。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多