2017-01-26 17 views
1

このコードは、 "count"と "odds"の値がまったく同じ(同じであってはならない)を返します。 実際には「o.id」のみをカウントし、両方に同じ値を返します。Laravel leftJoinとカウントの問題

「b.id」を正しくカウントするにはどうすればよいですか?

\DB::table('matches as m') 
    ->selectRaw('  m.id as match_id, 
        m.date_hour as date, 
        m.tournament_id as tournament_id, 
        h.name as host_name, 
        g.name as guest_name, 
        COUNT(o.id) as odds, 
        COUNT(b.id) as count 
        ') 
    ->whereRaw('DATE(m.date_hour) = DATE(NOW())') //OK 
    ->leftJoin('teams as h','h.id','=','m.host_id') 
    ->leftJoin('teams as g','g.id','=','m.guest_id') 
    ->leftJoin('odds as o','o.match_id','=','m.id') 
    ->leftJoin('bets as b','b.match_id','=','m.id') 
    ->groupBy('m.id') 
    ->having('odds','>','0') 
    ->get(); 
+0

使用しているデータベーステーブルの構造と、正確にしたいものの例を投稿してください。 – Jerodev

+0

@Jerodev私はテーブルを持っています:**は**、**はmatch_idで**はオッズ、**はmatch_idで**はベットしています。私は奇数と賭けの数でリストされた試合をしたいと思います。 – Rasko

答えて

0

置き換えます

COUNT(o.id) as odds, 
COUNT(b.id) as count 

をして:

COUNT(DISTINCT(o.id)) as odds, 
COUNT(DISTINCT(b.id)) as count 

それが動作するはずです。

+0

はい、これは私のために働いた。ありがとう! – Rasko