从数据库获取热门帖子 - symfony查询构建器 - MySQL

时间:2017-03-26 01:04:53

标签: php mysql sql symfony

我正在尝试进行一项查询,该查询必须合并来自2个不同表的信息,并且我在逻辑上遇到了麻烦。

以下是我的表格,我排除了一些不相关的信息

发布(groupId,dateCreated)

postbump(userId,postId)

我正试图获得“趋势”的帖子。换句话说,我需要获得

的帖子
  1. 在给定的组中,(由$ groups数组提供)

  2. 在指定日期之后(由$ date提供)

  3. 按他们有的颠簸数量排序

  4. 这是我正在建立的功能,只能获得新帖子,但它可能有助于提供对我所追求的内容的理解。请注意,我所拥有的代码的当前存储库是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中的答案就可以了。

1 个答案:

答案 0 :(得分:1)

我不知道symfony,所以我的回答是在sql中。您需要加入postpostbump表格,按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运算符中的参数数组绑定为单个值。