2
我遇到了一個棘手的問題,我想解決雄辯的方式,但我想我需要進入原始的SQL,我不是真的想要。以下是我迄今爲止:Laravel 5.3查詢 - 不同結果與總票數
用戶模式 - 用戶可以有很多帖子 ID |名稱
的帖子 - 可以有幾個類別 ID | user_id | title ...等
技能 - 這是多對多關係(skill_types與帖子相關)的樞軸表 ID | skill_type_id | post_id
技能類型 - 這是獨特技能的列表。 id | slug |標題|等等。
票數 - 都與技能表
ID | skill_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;
}
謝謝你的幫助。 SQL很容易,我同意,但主要障礙是找出最佳邏輯。你能否詳細解釋你的答案?我仍然堅持這個難題的一部分。 –
上面的SQL將給出一個結果集,其中包含skil_id和每個技能使用次數。你可以將這個結果放在一個數組中,對數組進行排序,並返回前10個技能。 – faraday703