2012-01-17 2 views
3

ことで、私は二人のユーザー間でメッセージを保存するコメントと呼ばれるテーブルがあり、テーブルの構造は次のようになります。グループメッセージは、最新のレスポンス

id | from_id | to_id | comment | date 

私だけの間、最新のメッセージを表示するようにデータを照会したいです2つの当事者。 私は以前にそれを見ました。

私はMYSQLを使用しています。

答えて

2

2人のユーザーのID番号が12であるとします。

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
AND (to_id = 1 OR to_id = 2) 
ORDER BY date DESC 
LIMIT 1; 

あなたが本当に杓子定規になりたい場合は、where句にこれを追加することができます。

AND NOT (from_id = to_id) 

彼らが現れて自分自身にメッセージを送信する例を防止します。これは、ユーザーが自分のシステムに自分自身にメッセージを送信することも可能であることを前提としています。ユーザ1について

+1

変更' TOP' 1 '。 –

+0

@ypercube良いスポッティング。私はセミコロンも忘れてしまった。私の脳を腐っているMS SQL Server。 –

+0

もし1つのidだけに関連するすべてのコメントを照会したいのであれば、2つではないでしょうか。それぞれの最新のメッセージでグループ化しますか? – numerical25

3

:ユーザ2について

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 2 AND to_id = 1) 
ORDER BY date DESC 
LIMIT 0,1; 

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 AND to_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 

句は、メッセージが他の当事者と副への二者のいずれかから送信されていることを確認する必要が「どこで」その逆のメッセージを表示します。

それは両方のユーザーに、2のいずれかから最新のメッセージを表示する必要がある場合:MySQLの `LIMIT 1 'に

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 
+0

は、1人のユーザに関連する最新のメッセージをすべて選択し、最後に受信または送信したメッセージでグループ化することができます。例はGoogle Emailです。 – numerical25

+0

はい、 "LIMIT 0,1"ビットを削除し、適用する必要のあるユーザーフィルタでフィルタリングしてください。 – ShaunOReilly

関連する問題