【发布时间】:2017-03-06 17:59:49
【问题描述】:
我遇到了一个棘手的问题,我想以雄辩的方式解决这个问题,但我认为我需要进入原始 sql,而这并不是我真正想要的。这是我目前所拥有的:
用户模型 - 用户可以有很多帖子 编号 |姓名
帖子 - 可以有多个类别 编号 |用户 ID |标题...等
技能 - 这是多对多关系的数据透视表(与帖子相关的技能类型) 编号 |技能类型 ID | post_id
技能类型 - 这是独特技能的列表。 编号 |蛞蝓 |标题 |等等。
投票 - 投票与技能表相关
标识 |技能ID
我需要做的是获得投票数排名前 10 的用户技能。 为此,我需要按名称合并技能并汇总投票数,然后按投票数排序并输出前 10 名。
可能今天我的大脑已经太累了,明天早上我会解决这个难题,但在我想出解决方案之前,也许其他人会帮助解决它。
我的解决方案:
public function getTopSkills($limit = 10, $offset = 0)
{
$results = DB::select('select skill_types.name as name, count(likes.id) as votes
FROM
skills
left join likes
on skills.id=likes.likeable_id
join posts on skills.item_id = posts.id
join users on posts.user_id = users.id
join skill_types on skill_types.id = skills.skill_type_id
where users.id = :userid
group by skill_types.name
order by votes desc
limit :limit
offset :offset', ['userid' => $this->id, 'limit' => $limit, 'offset' => $offset]);
return $results;
}
【问题讨论】:
标签: mysql laravel many-to-many