Php 条令中带限制的子查询

Php 条令中带限制的子查询,php,mysql,symfony,zend-framework,doctrine-orm,Php,Mysql,Symfony,Zend Framework,Doctrine Orm,我正在尝试做一个查询,它有一个子查询。现在它给了我一个错误。我在存储库中的功能是: public function getRecentPlaylists($count = 3) { $q = $this->_em->createQuery(" SELECT p.id, p.featuredImage, p.title, p.slug,

我正在尝试做一个查询,它有一个子查询。现在它给了我一个错误。我在存储库中的功能是:

public function getRecentPlaylists($count = 3) {


    $q = $this->_em->createQuery("
            SELECT p.id,
            p.featuredImage,
            p.title,
            p.slug,         
            a.firstName,
            a.lastName,
            a.slug as authorSlug,
            (SELECT updated 
                     FROM \Entities\Articles 
                     ORDER BY updated DESC LIMIT 1) as updated
            FROM \Entities\Playlist p
            JOIN \Entities\Account a
                        ON p.account_id = a.id
            ")
        ->setMaxResults($count);

            try{    
            return $q->getResult();
            }catch(Exception $e){
                echo $e->message();
            }

}
这给了我一个错误:

[Semantical Error] line 0, col 210 near 'LIMIT 1) as updated FROM': Error: Class 'LIMIT' is not defined.

我几乎要放弃信条了,我还没有弄清楚如何使用子查询进行查询,或者如何使用子查询进行联合。这个功能有什么帮助吗?谢谢

您需要的是取出内部查询并分别为其创建DQL,然后在内部使用生成的DQL

$inner_q = $this->_em
    ->createQuery("SELECT AR.updated FROM \Entities\Articles AR ORDER BY AR.updated DESC")
    ->setMaxResults(1)
    ->getDQL();

$q = $this->_em->createQuery("SELECT p.id,
        p.featuredImage,
        p.title,
        p.slug,         
        a.firstName,
        a.lastName,
        a.slug as authorSlug,
        (".$inner_q.") AS updated
        FROM \Entities\Playlist p
        JOIN \Entities\Account a
             ON p.account_id = a.id
    ")
    ->setMaxResults($count);
try{    
    return $q->getResult();
}
catch(Exception $e){
    echo $e->message();
}

在这种情况下,您可以使用条令的聚合表达式MAX来获取最新日期:

SELECT MAX(a.updated) FROM AppBundle:Article a

您不需要使用LIMIT。

您可以很容易地将自己的语法添加到条令中,例如将
LIMIT 1
添加到子查询中,如下所示

//AppBundle\DBAL\FirstFunction

我没有任何教义方面的经验,但您是否尝试过将
作为
资本化为
作为
?谢谢您的回答。这给了我一个错误:“a”附近的第0行第289列:错误:联接路径表达式中使用了标识变量\Entities\Account,但以前没有定义。@raygo you can
var\u dump($q->getSQL())
然后将查询粘贴到MySQL数据库中,查看错误在哪里;使用SQL查询修复它,然后将这些更改应用到DQL@raygo此外,您是否确定内部查询;因为它甚至不是一个加入,所以您总是选择第一条记录是的,我要播放列表的日期,我要属于该播放列表的最后一篇文章的日期这不起作用setMaxResults在子查询中被忽略,但是如果我需要怎么办,例如
LIMIT 15
?这将有所帮助,因为条令返回的错误是子查询返回许多结果(而不是一个)。
$dqb->from('MyAppBundle:Foo', 'foo')
    ->leftJoin('foo.bar', 'bar', 'WITH', 'bar = FIRST(SELECT b FROM MyAppBundle:Bar b WHERE b.foo = foo AND b.published_date >= :now ORDER BY t.startDate)');