2017-07-11 12 views
0

私はこのSQLクエリを使用して、少なくとも3つの共通点を持つユーザーを取得します。laravelクエリと同様の関心事を持つユーザーを取得する方法

$get_similar = $db->query(sprintf('SELECT ui.user_id, COUNT(*) AS common_interests 
               FROM users_interests ui 
               WHERE ui.interests_id 
               IN (

               SELECT ui2.interests_id 
               FROM users_interests ui2 
               WHERE ui2.user_id = %s 
               ) 
               AND ui.user_id <> %s 
               GROUP BY ui.user_id 
               HAVING common_interests >2 
               ', secure($this->_data['user_id']), secure($this->_data['user_id']))); 

上記のsqlクエリをlaravel雄弁クエリに変換するにはどうすればよいですか?このような何かが

$get_similar = \DB::raw('SELECT ui.user_id, COUNT(*) AS common_interests 
    FROM users_interests ui 
    WHERE ui.interests_id 
    IN ( 
    SELECT ui2.interests_id 
    FROM users_interests ui2') 
     ->where('ui2.user_id','=', secure($this->_data['user_id'])) 
     ->where('ui.user_id','<>', secure($this->_data['user_id']) 
     ->groupBy('ui.user_id') 
     ->having('common_interests', '>', '2')_; 

または完全に説得力のバージョンが動作するはず

+0

上記のクエリが完全に機能する場合は、laravel rawを使用して上記のクエリを実行します。 –

+0

問題は私がチームでプロジェクトに取り組んでいることです。私たちは最善の方法でlaravelを使う必要があります。 –

答えて

1

次のクエリは、トリックを行います(私はあなたのモデルを知らないので、代わりにモデルのDBを使用する必要がありました)

$user_interests = User::find($user_id)->interests->pluck('id')->toArray(); 

    $get_similar = DB::table('users_interests') 
     ->select(DB::raw('count(*) as common_interests, user_id')) 
     ->whereIn('interest_id', $user_interests) 
     ->where('user_id','<>', 3) 
     ->groupBy('user_id') 
     ->havingRaw('COUNT(*) > 2') 
     ->get(); 
+0

ありがとうございます完璧です。 –

1

$get_similar = \DB::select('ui.user_id, COUNT(*) AS common_interests') 
->from('users_interests ui') 
->whereIn('ui.interests_id', function($query) { 
    $query->select('ui2.interests_id') 
    ->from('users_interests as ui2'); 
}) 
->where('ui2.user_id','=', secure($this->_data['user_id'])) 
->where('ui.user_id','<>', secure($this->_data['user_id']) 
->groupBy('ui.user_id') 
->having('common_interests', '>', '2')->get(); 
+0

私のために働いていません –

+0

働いていないことは何のエラーを得るのですか? –

関連する問題