我的问题是教义和SQL的GroupBy与顺序按Symfony的2学说:排序依据 - 的GroupBy最大元素与加入
那么一点点的描述有一家店(S),店内有篇(一)和有一个实体访问计数器(vc)来统计不同事物的访问量,也用于商店和文章。
我想要一个文章列表(热门文章),但只是每个商店访问量最大的文章。
class Shop {
private $id;
private $name;
private $is_published;
...
/**
* OneToMany articles
*/
private $articles;
}
class Article {
private $id;
private $name;
private $is_published;
...
/* ManyToOne Shop*/
private $shop;
}
class VisitCounter {
private $id;
private $object_type; //0 for Article, 1 for Shop, 2 for Category
private $object_id;
...
private $nr_alltime_visits;
}
然后我试图与在文章库下面的查询:
$query = $this->createQueryBuilder('a', 's', 'vc')
->select('a, s')
->leftJoin('a.shop', 's')
->leftJoin('ProjMyBundle:VisitCounter', 'vc', 'WITH', 'vc.object_type = 0 AND cs.object_id= a.id')
->where('a.is_published = 1 AND s.is_published = 1)
->orderBy('vc.nr_alltime_visits', 'DESC')
->groupBy('a.shop');
但我并没有得到相应的文章预计,如果我删除该组由我得到正确的文章,但每个店铺超过1个。
任何想法?
这个问题,我在车间和第(私人$ nr_visits)字段,然后我有这样的事情(可以帮助别人的未来)之前:
$query = $this->createQueryBuilder('a', 's')
->select('a, s')
->where('a.is_published = 1 AND s.is_published = 1')
->leftJoin('a.shop', 's')
->groupBy('a.shop')
->orderBy('nr_visits', 'DESC');
$query->andWhere('a.nr_visits = (SELECT MAX(a2.nr_visits) as nr_visits2 FROM ProjMyBundle:Article AS a2 WHERE a2.is_published = 1 AND a2.shop=a.shop GROUP BY a2.shop)');
感谢您的评论的问题在得到解决然后在查询内部完成一个新的dql。 $查询 - > andWhere('cs.visits_all_time =(/ *新的查询* / – felipep