2016-09-06 12 views
0

私はすでにの単一グループを訪問しました。私は2つの列で問題を抱えています。MySQL:複数のグループを持つDescの注文の問題

「メッセージ」という名前のテーブルがあります。メッセージは、ユーザーの投稿のコメント

id | posts_id | from_user_id | to_user_id | message_description | created_at 
----------------------------------------------------------------------------- 
1  1   1    2    test1    2016-09-06 10:00:00 
2  1   1    2    test2    2016-09-06 11:00:00 
3  1   4    2    test3    2016-09-06 09:00:00 
4  1   4    2    test4    2016-09-06 15:00:00 
5  2   1    2    test1    2016-09-06 10:00:00 
6  2   1    2    test2    2016-09-06 11:00:00 
7  2   4    2    test3    2016-09-06 09:00:00 
8  2   4    2    test4    2016-09-06 15:00:00 

あるクエリの結果の出力は、私はポスト賢明&ユーザー賢明な彼らの最新のメッセージを取得しようとしている何

id | posts_id | from_user_id | to_user_id | message_description | created_at 
----------------------------------------------------------------------------- 
2  1   1    2    test2    2016-09-06 11:00:00 
4  1   4    2    test4    2016-09-06 15:00:00 
6  2   1    2    test2    2016-09-06 11:00:00 
8  2   4    2    test4    2016-09-06 15:00:00 

されなければなりません。

私は以下のように試しましたが、正しい結果が得られていません。

SELECT * 
FROM messages 
WHERE to_user_id = '2' 
GROUP BY posts_id DESC, 
     from_user_id 
ORDER BY id DESC 
+0

@Strawberry私はすでにその投稿にアクセスしています)。しかし、それは単一のグループのためだけです、私は答えを得ることができないその方法で列2グループを使用する必要があります –

+1

うーん。 from_user_idごとに最後のエントリを取得する必要があると思われるので、これはグループ別/質問別のものではないと思います。 * FROM messages t1 WHERE t1.id =(メッセージt2から最大(id)を選択します。ここで、t2.posts_id = t1.posts_idとt2.from_user_id = t1.from_user_id) –

+0

ユーザーは3人ですが、 (ユーザー2)のメッセージを返信したいと思うようです。 – Strawberry

答えて

1

この問題は、SOに掲載された何千もの他のものと同じです。マニュアルで説明しているように、最適解は非結合サブクエリです(例:

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT MAX(id) id 
     FROM my_table 
     WHERE to_user_id = 2 -- OPTIONAL 
     GROUP 
      BY from_user_id 
    ) y 
    ON y.id = x.id; 
+0

posts_idを使用する場所不明な列 'y.id'を返す –

+0

投稿IDはここでは必要ありませんが、to_user_idを追加しました。 – Strawberry

+0

私はそれが必要だと思います。更新の質問を "メッセージ"テーブルのデータで確認してください。まだ "Unknown column ON y.id"エラーが表示されます。 –