2017-09-17 22 views
0

사용자는 다른 사용자가 "좋아"하거나 "싫어할"수있는 기사를 추가 할 수 있습니다.사용자 "좋아요"및 "싫어요"를 기반으로 가장 인기있는 기사 찾기

좋아요 싫어하는 것으로 계산 된 가장 인기있는 기사를 찾아야합니다. 예를 들어 기사 3 좋아하는 일 명을 싫어하는 경우, 내 데이터베이스 구조를 2

의 인기 값이됩니다 부여해야 내가 함께 가입 :

내 기사 테이블 :

id | user_id | title | description | views | created_at | updated_at 

내가 좋아하는 테이블 :

id | user_id | article_id | like_type | created_at | updated_at 

어떻게 가장 인기있는 기사는 찾을 수 있습니까?

+0

지금까지 해보신 것은 무엇입니까? 일반적인 MySQL 쿼리로 어떻게 작성하는지 알고 있습니까? –

+0

비슷한 유형은 부울입니까? 뭐야? – inet123

+0

@RossWilson 아니요 아니요 –

답변

0

당신은 당신이에 의해 주문 문 간단한 그룹과 요구를 달성 할 수있다, 뭐 그런 작업을해야합니다 :

return Article::select('title', DB::Raw('SUM(2*likes.like_type-1) as likes_count')) 
    ->leftJoin('likes', 'likes.article_id', '=', 'articles.id') 
    ->groupBy('articles.id') 
    ->orderBy('likes_count', 'DESC') 
    ->get(); 

내가 그 like_type이 등에 싫어하는 0 또는 1을 알리는 부울입니다 가정 - 경우 그렇지 않으면 SUM 문을 변경해야합니다.

+0

이 작업 yessss : D 을하지만 난이 DB :: 원시 이해하지 못하는 어떤 –

+0

에 의해 원료 및 그룹 나를 로 설명 할 수있다 ('SUM (2 * likes.like -1)) –

+0

원시 -하자 당신은 당신의 laravel 질의 건물 안에 ** raw ** sql을 씁니다. '2 * likes.like-1'은 [0,1] -> [-1,1]을 돌리는 내 방식입니다. 그래서 같은 것을 합하면 하나를 추가하고 싫어하는 것은 하나를 뺍니다. – inet123