2016-11-03 14 views
1

groupBy( '​​author_id')ではなく最新の結果を得るためにどのようなlaravelクエリを使用しますか?今私が試したすべてが最初の結果を引き出す。私は、IDのSQL関数としてMAX(id)を使用して試してみましたが、運グループの方法グループの最新のレコードを確認

はそれだけでここ

は私が使用しています私のモデルのクエリでグループ内の最初のレコードを見つけ、レコードは[OK]を見つけていない:

私はこのようにも試してみました

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id') 
     ->select(DB::raw('*, max(id) as id)) 
     ->groupBy('author_id') 
     ->orderBy('id', 'desc'); 
} 

と運:

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id')->groupBy('author_id')->orderBy('created_at', 'DESC'); 
} 

私も試みなかった

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id') 
     ->select(DB::raw('*, max(created_at) as created_at)) 
     ->groupBy('author_id') 
     ->orderBy('created_at', 'desc'); 
} 

上記のすべては、グループauthor_idの最初の行を返します。私はすべてのグループまたは最新の行の最後の行を返すようにしています。私も試しました - >最新()とサイコロ!

ご協力いただきありがとうございます。

マイ表: は が をAUTHOR_ID PROJECT_ID

idが

+0

希望の出力とともにいくつかのサンプルデータを表示すると役に立ちます。 –

答えて

1

updated_atの メッセージ のcreated_at は、サブクエリを作成recipient_idことはもはやので、必要になりますことによって、このように、グループ内の各著者の最新のメッセージIDを取得・ジョインあなたの参加サブクエリの各著者の最新のメッセージIDを既に取得しています

あなたがすでに取得しているため、max(created)は必要なくなりましたティン各グループの最新の作成したメッセージ

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id') 
     ->select('*') 
     ->join(DB::raw('(Select max(id) as id from messages group by author_id) LatestMessage'), function($join) { 
      $join->on('messages.id', '=', 'LatestMessage.id'); 
      }) 
     ->orderBy('created_at', 'desc'); 
} 

Screen Shot

+0

OMG !!ありがとう、私は過去4時間この頭を叩いています。私は、この結合を使用しないでこれに別の解決策を見つけました。私も答えを投稿します – max234435

0

は時間とこのフォーラムからいくつかの入力のために、この時に私の頭を叩いた後、私はまた、望ましい結果を私に提供しているこのになりました。

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id') 
     ->select('*') 
     ->whereIn('id', function($q){ 
      $q->select(DB::raw('MAX(id) FROM messages GROUP BY author_id')); 
     }); 
} 
+0

しかし、これはすべての行でこのサブクエリを呼び出すため、遅いです – Beginner

+0

どのようにクエリの速度を測定するのですか?私はそれがSQLになると最高ではない – max234435

+0

クエリの前にExplainの前にちょうど – Beginner

関連する問題