【问题标题】:Get trending posts from database - symfony query builder - MySQL从数据库获取趋势帖子 - symfony 查询构建器 - MySQL
【发布时间】:2017-03-26 01:04:53
【问题描述】:

我正在尝试进行一个查询,该查询必须结合来自 2 个不同表的信息,但我遇到了逻辑问题。

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

post(groupId, dateCreated)

postbump(userId, postId)

我正在尝试获取“趋势”的帖子。换句话说,我需要获取

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

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

  3. 按凹凸数量排序

这是我正在构建的功能,它只会获取新帖子,但它可能有助于了解我所追求的目标。请注意,我拥有的代码的当前存储库是 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 回答就可以了。

【问题讨论】:

  • in 运算符中的绑定似乎不正确。
  • 绑定是什么意思?第一段代码按描述工作,所以我不知道您可能指的是什么问题。

标签: php mysql sql symfony


【解决方案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

还请注意,您不能简单地将 in 运算符中的参数数组绑定为单个值 - 除非 symfony 的查询构建器使用字符串操作进行参数设置而不是准备好的语句。

【讨论】:

  • 我会看看是否可以将您的逻辑实现到我的查询构建器中。至于 in 运算符,我相当确定查询生成器正确处理了数组。如果有问题,我会通知您。
  • 好吧,我的尝试没有成功。我理解你的逻辑,但问题是我最终会得到几行具有相同 post_id 的行,而它们之间唯一不同的是后颠簸。我只需要按它们有多少颠簸排序的 post_ids(无重复)。我的下一个思路是将查询分成两部分,我们首先计算每个帖子的颠簸量,然后加入并排序。
  • 我的查询为每个 postid 返回一条记录,因为 groupid 和 datecreated 是 post 表中的字段,而 group by 创建了组。所以,我不太明白你的评论。
  • 我得到它的工作谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多