我正在尝试进行一项查询,该查询必须合并来自2个不同表的信息,并且我在逻辑上遇到了麻烦。
以下是我的表格,我排除了一些不相关的信息
发布(groupId,dateCreated)
postbump(userId,postId)
我正试图获得“趋势”的帖子。换句话说,我需要获得
的帖子在给定的组中,(由$ groups数组提供)
在指定日期之后(由$ date提供)
按他们有的颠簸数量排序
这是我正在建立的功能,只能获得新帖子,但它可能有助于提供对我所追求的内容的理解。请注意,我所拥有的代码的当前存储库是post存储库(对于那些不熟悉symfony查询构建器的人来说,它基本上意味着它会自动从post表中选择)。
public function getNewHomeFeedPosts($groups){
$qb = $this->repository->createQueryBuilder('x');
$qb->select('x');
$qb->where('x.groupId IN (:groups)');
$qb->setParameter('groups',$groups);
$qb->orderBy('x.dateCreated','DESC');
return $qb->getQuery()->getResult();
}
这就是我到目前为止所做的事情,我真正的问题在于按每个帖子所有的颠簸量排序。我认为必须在某个时候使用联接。
public function getTrendingHomeFeedPosts($groups, $date){
$qb= $this->repository->createQueryBuilder('x');
$qb->select('x');
$qb->where('x.groupId IN (:groups) AND x.dateCreated < :dateCreated');
$qb->setParameter('groups',$groups);
$qb->setParameter('dateCreated', $date);
//todo
return $qb->getQuery()->getResult();
}
如果您不熟悉querybuilder语法,那么SQL中的答案就可以了。
答案 0 :(得分:1)
我不知道symfony,所以我的回答是在sql中。您需要加入post
和postbump
表格,按postid
分组,并计算数量和数量以及日期:
select p.postid, p.groupid, p.datecreated, count(*) as postbumps
from post p
left join postbump pb on p.postid=pb.postid
where p.groupid in (...) and p.datecreated<...
group by p.postid, p.groupid, p.datecreated
order by count(*) desc
请注意,除非symfony的查询构建器使用字符串操作进行参数设置而不是预处理语句,否则不能简单地将in
运算符中的参数数组绑定为单个值。