2011-09-17 28 views
-1

私はmysqlにメッセージのテーブルを持っています。 列は、送信者、受信者、テキスト、ID、日付として名前が付けられます。MySQLのGROUP BYステートメント

このようなクエリ:送信者(またはレシーバ)によって

SELECT max(id), text 
FROM `messages` 
WHERE reciever = $user_id OR sender = $user_id 
GROUP BY reciever, sender 
ORDER BY date DESC 

ITグループメッセージとそれが最後のメッセージIDの最大値(ID)を返しますが、それは最後のメッセージテキストを返しません。

JOINとUNIONなしでこの問題を解決する方法はありますか?

ありがとうございます!

+0

をクエリが動作しない理由は、私の答えに記載されています。しかし、私はあなたがクエリを誤って作成し、人々があなたが本当に望むものを明確に知ることができないため、クエリ自体に加えてあなたの目的をnatrual言語で述べるべきだと思います。 –

+0

同様の質問に対する回答については、このリンクを参照してください。[最大-n-per-group + mysql](http://stackoverflow.com/questions/tagged/greatest-n-per-group+mysql?sort=votes&pagesize=50) –

答えて

3

次のようにあなたはこれを行うことができます。

SELECT * FROM messages 
WHERE id IN 
    (
     SELECT MAX(id) FROM messages 
     WHERE reciever = $user_id OR sender = $user_id 
     GROUP BY reciever, sender 
    ) 
ORDER BY date DESC 
1

をグループによる操作は合計、平均、カウントなどの集計操作と仲間にのみ使用することができます。 他の属性を使用するだけで意味がありません。

同じreiceiverを持つ2つのタプルがあるとします。グループ化されたテキストはどのようなものでしょうか?ただ意味をなさない。

あなたの目的は、私がライトを推測したならば、あなたは@ danishgoelからの答えがあなたの望むものであるかもしれないと推測しています。

0

$ user_idの最後のメッセージを選択するには:

SELECT id, text FROM `messages` 
WHERE `reciever` = $user_id OR `sender` = $user_id 
ORDER BY `id` DESC 
LIMIT 1