gpt4 book ai didi

mysql - Laravel 5.3 查询 - 具有投票总和的不同结果

转载 作者:行者123 更新时间:2023-11-29 02:15:42 24 4
gpt4 key购买 nike

我遇到了一个棘手的问题,我想以 Eloquent 方式解决它,但我认为我需要进入原始 sql,但我并不真正想要。这是我目前所拥有的:

  1. 用户模型 - 用户可以有很多帖子编号 |姓名

  2. 帖子 - 可以有多个类别编号 |用户 ID |标题...等等

  3. 技能 - 这是多对多关系的数据透视表(与帖子相关的技能类型)编号 |技能类型 ID | post_id

  4. 技能类型 - 这是独特技能的列表。编号 |鼻涕虫 |标题 |等等。

  5. 投票 - 投票与技能表相关

编号 |技能编号

我需要做的是获取用户投票数排名前 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;
}

最佳答案

幸运的是,SQL 比你想象的要简单

SELECT skill_id, count(id) 
FROM VOTES
group by skill_id

然后您只需将 skill_id 绑定(bind)回技能类型表以获取名称而不是数字 ID

关于mysql - Laravel 5.3 查询 - 具有投票总和的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com