私は現在、私のプロジェクトの 1 つのメッセージング システムに取り組んでいます。メッセージと返信を保存するために単一のテーブルを使用しています(つまり、parent_idを使用)。
テーブル構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `messages` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned NULL,
`sender_id` int(10) unsigned NOT NULL,
`receiver_id` int(10) unsigned NOT NULL,
`who` enum('bride','member') NOT NULL,
`subject` varchar(200) NOT NULL,
`body` text NOT NULL,
`sent_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
ここで、 parent_idは返信したメッセージの ID です。parent_id=NULLの場合、新しいメッセージです
そのメッセージを送信したのは誰ですか-つまり、花嫁またはメンバー. 花嫁とメンバーの詳細用に 2 つの個別のテーブルがあります。
ここで、INBOX 内のメッセージを一覧表示するクエリが必要です (GMAIL のように、一連の会話 [メッセージ + 返信])。
クエリの作成を手伝ってもらえますか?
これは私が取り組んでいたものです:
SELECT id
, parent_id
, sender_id
, receiver_id
, who
, subject
, body
, sent_date
FROM `messages`
WHERE sent_date IN ( SELECT MAX( sent_date ) FROM `messages` WHERE receiver_id = 1 GROUP BY sender_id )
AND who = 'bride'
AND receiver_id = 1
ORDER
BY id DESC
LIMIT 0, 8