0

私はテーブルを持っています

message_id、to_id、from_id、message

スレッド化されたメッセージングシステムを作成しました。私は5人が1人のメンバーと話している。

メンバーとして私は見る

メンバー1はこんにちは、メンバー2はこんにちはと言います(最新の返信はこんにちはと言いたいです)

メンバー1はこんにちは、メンバー3はこんにちは、メンバー1はようこそと言います(これはようこそと言いたいです)

メンバー2はこんにちはと言います(私はこれをこんにちはと言いたいです)

現在、member1のセッションIDであるIDの1つのみが提供されています。私(member1)が最新の返信を残したシナリオ2をどのように表示しますか。

簡単にできる

 SELECT * FROM messages WHERE to_id=$session_id ORDER BY message_id DESC LIMIT 1 

ただし、これには着信メッセージのみが表示されます。着信メッセージと発信メッセージの最後を表示する必要があります。

どのような質問を提案しますか?:\効率的な方法がない場合は、テーブルを変更する可能性がありますか?初めてメッセージングシステムをセットアップしたときは、アドバイスを歓迎します。

4

2 に答える 2

1

UNION演算子を使用して最新の着信メッセージを取得し、その結果に最新の発信メッセージを追加する必要があります。

SELECT * FROM messages WHERE to_id=$session_id ORDER BY message_id DESC LIMIT 1

UNION ALL

SELECT * FROM messages WHERE from_id=$session_id ORDER BY message_id DESC LIMIT 1
于 2012-07-07T11:18:38.590 に答える
1
SELECT 
*
FROM messages 
WHERE to_id = $session_id
OR from_id = $session_id
ORDER BY message_id DESC
LIMIT 1
于 2012-07-07T10:36:59.353 に答える