2017-09-17 12 views
0

ユーザーは、他のユーザーが「好き」や「嫌い」できる記事を追加できます。ユーザー「好き」と「嫌い」に基づいて最も人気のある記事を見つける

嫌いを差し引いた最も人気のある記事を探す必要があります。例えば、記事が3好きで、1つの嫌悪感を持っている場合、それは私のデータベース構造を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は、などのために嫌いか1に0を述べブールであると仮定 - もしそうでない場合は、SUMステートメントを変更する必要があります。

+0

はその作業YESSSS:D をいますが、私はこの DB ::生理解していないものを –

+0

によって生やグループである私 にそれを説明することができます( 'SUM(2 * likes.like -1)) –

+0

生 - レッツララベルクエリビルディングの中に** raw ** sqlを記述します。 '2 * likes.like-1'は[0,1] - [-1,1]を回す私の方法です。そういうものを加算すると1つが加算され、嫌いなものは1つ減算されます。 – inet123

関連する問題