2013-04-26 53 views
0

我想为唯一用户选择MAX分数对象。Doctrine distinct createQueryBuilder

因此,用户应该是不同的,我应该得到用户(订单)的最高分数,并且我需要获得其他对象值,如dataAdded用于此最高分数。

$query = $this->createQueryBuilder('s'); 
    $query->select('DISTINCT s.user, s'); 
    $query->where('s.challenge = :challenge')->setParameter('challenge', $challenge); 

    $query->andWhere('s.date_added BETWEEN :monday AND :sunday') 
     ->setParameter('monday', $startDate->format('Y-m-d')) 
     ->setParameter('sunday', $endDate->format('Y-m-d')); 

    $query->orderBy('s.score', 'DESC'); 

    //$query->groupBy('s.user'); 
    $query->setMaxResults($limit); 

    $results = $query->getQuery(); 

无论我如何尝试,我都无法让工作清晰。我曾尝试由MAX(s.score)分组,但是这会将随机对象与最高分数关联起来,而不是同一个对象。

有没有人有解决方案?不同的只是似乎没有工作...

生成的查询:

SELECT DISTINCT s.user, s FROM Digital\ApplicationBundle\Entity\ChallengeScore s WHERE s.challenge = :challenge AND (s.date_added BETWEEN :monday AND :sunday) ORDER BY s.score DESC 

但错误;(

[Semantical Error] line 0, col 18 near 'user, s FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression 

其值得一提的是用户的关系当我尝试。这对其他文件这工作正常...

回答

0

如果你需要得到计数不同的值,你可以使用countDistinct。但是,如果你必须得到所有不同的值,使用groupBy