私はgmailとfacebookのようなスレッド型のメッセージシステムを作成しています。受信ボックスには最新のメッセージの件名、送信者名、タイムスタンプ。ここでfacebookとgmailのようなスレッドプライベートメッセージングシステムを作成する
は私のテーブルが設定されている方法は次のとおりです。
users:
user_id
user_name
thread:
thread_id
title
to_id
to_keep
to_read
from_id
from_keep
date
message:
message_id
thread_id
to_id
from_id
message_text
date
私が今やっているユーザーが新しいメッセージを作成するとき、それはスレッドテーブルに新しいスレッドを作成し、その中に新しいメッセージユーザーがスレッドに応答すると、to_id
とfrom_id
を交換し、それに基づいて新しいメッセージを作成する点を除き、現在のスレッドをスレッドテーブルに複製します。
また、受信トレイビューでは、user_id
に基づいてすべてのスレッドを照会することができます。 SELECT * FROM thread WHERE to_id = 2 and to_keep = TRUE ORDER BY date DESC
のようなもの、または送信トレイにメッセージを表示したい場合はSELECT * FROM thread WHERE from_id = 2 and from_keep = TRUE ORDER BY date DESC
のようなものになります。
新しいメッセージがあるときにユーザーがスレッドを開くと、to_readはtrue UPDATE thread SET to_read = TRUE WHERE thread_id = 4
に更新されます。
私はこのプロセスを複雑にしすぎていると感じており、これを行うにはより良い方法があるはずです。
ご意見やご感想をお寄せください。
このようにして、スレッドテーブルからすべてを選択してから、必要なものすべてを表示するためにユーザーテーブルを使用して結合します。しかし、私はこれを行うより良い方法があるように感じる。
なぜスレッドはto_idとfrom_idを必要としますか?メッセージは、送信者と受信者を結びつけるものです。スレッドはメッセージのコンテナです。あるいは私は誤解していますか? –
いいえ、あなたは正しいです。受信トレイにあるすべてのスレッドとスレッド内の最新のメッセージからの情報だけを選択してクエリを実行するのは難しいことでした。それは理にかなっていますか? – bigmike7801