我有以下表结构来发布活动(Facebook Like功能):
用户: id,firstname,lastname
KickPointAction: id,user_id,post_id,timestamp
发布: id,user_id,text,timestamp
如果有人喜欢Post,则会在KickPointAction中创建一个引用目标帖子的条目。我现在需要获得一个排行榜来计算用户有多少喜欢。
这是当前的代码,但是:
$allUsers = $this->getObjectManager()->getRepository('Db\Entity\User')->findAll();
$usersArray = array();
foreach($allUsers as $user) {
$usersArray[] = $this->getObjectManager()->createQueryBuilder()
->select('u.firstname, u.lastname, u.id AS userid, u.avatarUri, COUNT(u) AS total_kickpoints')
->from('Db\Entity\User', 'u')
->innerJoin(
'Db\Entity\Post',
'p',
Join::WITH,
'u.id= p.user'
)
->innerJoin(
'Db\Entity\KickPointToPost',
'k',
Join::WITH,
'k.post=p.id'
)
->andwhere('p.user = :user')
->setParameter('user', $user)
->getQuery()
->getResult()[0];
}
我认为这不是获得排行榜的最佳方式。是否有其他可用的解决方案,可能是从Users表开始的正确连接?