2012-02-20 7 views
0
$query = mysql_query("SELECT *, MAX(date_time) FROM messages 
         WHERE user_to='$current_user' OR user_from='$current_user' 
         GROUP BY conversation 
         ORDER BY date_time DESC LIMIT 0,5") or die(mysql_error()); 

echo $message['MAX(date_time)']; 

ここで選択されているdate_timeと同じ行にある 'content'列を表示すると、メッセージと時刻が一致しますか?それは私がグループ(と呼ばれる会話)の「メッセージ」を持ってしようとしていると私は最新のメッセージを表示したい同じ行の値を取得する集計MYSQL関数

echo $message['MAX(content)']; 

ようなものになるだろう。現在、最新の時刻を表示していますが、最新のメッセージは表示していません。

ありがとうございました。

+3

質問のある研究はありますか?あなたの質問に関連して、実際に何百もの質問があります。 – zerkms

+0

プロダクションでは、実際には、...または死ぬ(機密情報);を使用すべきではありません。 – biziclop

答えて

2

あなたのテーブルには、メッセージIDとして使用する自動インクリメント idカラムを持っている場合には、最高のid値も、会話の中で、最新のメッセージ

0

メッセージをdate_timeで注文し、最初のタプル(LIMIT 1)のみを使用してください。 メッセージから最新のタプルだけを必要とする理由を集約する理由はありません。おそらくあなたはこれを詳述し、テーブルに関するいくつかのより多くの情報を提供することができます。

SELECT content, date_time 
FROM messages 
WHERE user_to='$current_user' OR user_from='$current_user' 
ORDER BY date_time DESC 
LIMIT 1 
1

以下は試してみてくださいする必要があります:

SELECT * from messages as ts 
LEFT JOIN (select max(id) as maxid from messages group by date_time) as tsm 
ON ts.id=tsm.maxid 
WHERE (ts.user_to='$current_user' OR ts.user_from='$current_user') 
ORDER BY ts.date_time DESC LIMIT 0,5 

メッセージテーブルのIDがprimaryの場合、

0

自動インクリメントキーがある場合は、試してみることができます:

$query = mysql_query("SELECT * FROM messages as m 
         WHERE user_to='$current_user' OR user_from='$current_user' AND 
          id IN (SELECT MAX(id) FROM messages as m2 GROUP BY m2.conversation) 
         ORDER BY date_time DESC LIMIT 0,5") or die(mysql_error()); 
関連する問題