0

Facebookに似たメッセージングシステムを作成しています。

私は2つのテーブルを持っています:

messages =>
  m_id (message id)
  t_id (thread id)
  author_id (id of user that wrote the message)
  text (Text for the message)
  date (date)
  time (time)

thread_recipients =>
  t_id (thread_id)
  user_id (id of the user that will belong to this thread)
  read (Flag to tell if there are any unread messages)

したがって、私が基本的に望んでいるのは、ユーザーが参加しているスレッド (会話) のリストを取得することです。そのリストで、スレッドに投稿された最後のメッセージのテキスト、日付、時刻を選択したいと思います。

sqlfiddle を作成しました: http://sqlfiddle.com/#!2/a3d9b/2

したがって、基本的に、このクエリは最後の行のみを返すようにします。これは、メッセージ ID が最も高いためです。

サブクエリなしで実行できれば、それは素晴らしいことです。そうでなければ、私はそれと一緒に暮らす必要があります(:

編集: サブクエリでそれを行う方法を見つけました。しかし、ここでの私の大きな懸念はパフォーマンスです。できれば別の方法でやりたいです。

SELECT r.t_id, m.author_id, left(m.text, 50)
FROM
messages m,
thread_recipients r
WHERE
r.user_id = 16 and
r.t_id = m.t_id and
m.m_id = (SELECT MAX(mm.m_id) FROM messages mm WHERE mm.t_id = m.t_id)
4

2 に答える 2

0

これを見てください: http://www.techonthenet.com/sql/max.php これがあなたが必要としているものだと思います。

于 2013-05-16T11:59:12.853 に答える