2

PHP と mySQL を使用して、Facebook に少し似た通知機能を備えたプライベート メッセージング システムを作成しました。

データベース テーブルには次のフィールドがあります (すべてがリストされているわけではありません)。

  • メッセージ ID
  • 送信者ユーザーID
  • RecUserID
  • メッセージ
  • 主題
  • 日付時刻
  • ステータス - 既読かどうか
  • RepliedStatus - これをどのように使用すればよいですか?
  • DeleteRec - 受信トレイから削除
  • DelSender - 送信者の受信箱を削除
  • RepliedUserId - ユーザーが元のメッセージに返信するとき、これは受信者の ID に変更されます

各メッセージがスレッドを作成するため、すべての返信は 2 番目のテーブルに格納されます。2 番目のテーブルは次のようになります。

  • メッセージ ID - 外部キー
  • 再利用者 ID
  • メッセージ
  • 日付時刻

新しいメッセージがユーザーに送信された時点で、メッセージの「ステータス」を未読に変更します。これからカウントクエリを実行して、通知内のすべての未読メッセージを一覧表示できます。

しかし、ユーザーがそのメッセージに返信した場合、元の「ステータス」フィールドを未読に設定することはできません。これは両方のユーザーの通知に表示されるためです。「RepliedStatus」という別のフィールドを作成しましたが、これを使用してメッセージの返信に通知を表示する方法がわかりません。

みんなありがとう。

4

3 に答える 3

2

返信テーブルがある場合、最初のステータスに返信ステータス列は必要ありません。返信テーブルにレコードが存在するため、ユーザーがメッセージに返信したことがわかります

于 2012-01-07T14:42:51.897 に答える
0

「previous_message」という名前の最初のテーブル (たとえば、「messages」テーブル) に INT および null 許容列を追加しないのはなぜですか?

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL;

したがって、すべてのメッセージは前のメッセージと同じテーブルにあり、シーケンスを理解できます。それが役立つ場合は、同じ定義の「next_message」列を作成し、返信時に関連レコードを更新できます。

そうすることで、各返信でステータス列を使用できます。

同じ DB 編成を維持したい場合は、2 番目のテーブルに列ステータスを追加することをお勧めします (「返信」としましょう)。

お役に立てれば

于 2012-01-07T14:45:31.817 に答える
0

私は削除された列を一度入れて、同じものを読んだり読んだりしないようにします:

[{"0":"both", "1":"Sender", "2":"receiver"}];

そして、次のようなトレッド メッセージをフェッチします。

$sql = "SELECT * FROM messagetreads 
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].")
AND deleted !== 0
ORDER by TreadID AND DateTime ASC";

送信者「削除」がトレッドの場合...データベース内のすべてのトレッド関連IDは、削除列が2の場合、1または0に変更されます...

しかし、繰り返し削除された通知データのような別の列を作成する方が良いと思います

  • TreadID (FK_message_Table)
  • 削除 (0 = 両方とも削除された UserID = この送信者または受信者に表示されない)
  • 通知 (0 = 両方読み取り UserID = この送信者または受信者に読み取り)

次に、ステータスまたは削除ステートメントを変更するのは簡単です。

SELECT は次のようなものになります。

$SQL = "SELECT * 
FROM messagetreads
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].")
IN (SELECT TreadID WHERE delete !== (0 OR ".$_SESSION['MyCurrentId']."))";

私たちのメンバーIDが列に含まれている場合、すべてのトレッドは表示されませんが、送信者が削除するときに受信者のIDが0である場合、両方のメンバーがメッセージを「削除」できるようにすることができます。通知も同じ!

ずっと後に、cron ジョブが来て、非常に古いメッセージ read(0) を削除します...

PS: これは、ウォールへの新しい投稿、写真へのコメント、またはカレンダーへの新しいイベントを通知するような通知システムでもあります...列データにさらに情報を追加し、php または java-ajaxed で同様に faormat するだけです...

于 2012-01-07T19:09:35.737 に答える