学说,如何加入一个结果"

时间:2014-04-15 10:04:44

标签: php postgresql symfony doctrine-orm doctrine

我在Symfony2上工作并尝试使用Doctrine执行所有查询。

我是一个拥有所有可能语法的新手,抱歉,如果这是一个noob问题......

在我的模型上,我有一些“专业人士”获得了多个“评论”。 我希望得到一些专业人士,可扩展性限制,并且每一个,只是最新的评论。

我试过了:

    $dql = "    SELECT 
                    Pro,
                    review
                FROM 
                    Pro
                LEFT JOIN (
                    SELECT Review FROM Review WHERE Review.id = Pro.id ORDER BY Review.date_crea LIMIT 1
                ) AS review
    ";
    $em = $this->getEntityManager();
    $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($em);
    $rsm->addRootEntityFromClassMetadata('MyProject\Bundle\FrontBundle\Entity\Pro', 'p');
    $query = $em->createNativeQuery($dql, $rsm);

但是我收到了这个错误:

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input LINE 9

这是我的最后一次尝试,我用Doctrine上的不同方法和对象做了这个,比如createNativeQuery,createQuery,createQueryBuilder ......

有人成功吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个

            SELECT 
                Pro,
                r.Review
            FROM 
                Pro
            LEFT JOIN (
                SELECT Review.id as id,Review FROM Review 
                group by Review.id 
                having Max(Review.date_create)
            ) AS r on Pro.id=r.id

编辑已替换为窗口功能

       SELECT 
            Pro,
            r.review
        FROM 
            Pro
        LEFT JOIN (
            SELECT Review.id as id,Review, (rank()  over( partition by Review.id order by  Review.date_create )) as hit FROM Review 
        ) AS r on Pro.id=r.id and r.hit=1;