0

Facebook メッセージのようなメッセージング システムを構築しました。会話は 1 つの mysql テーブルで行われるので、receiverId, senderId, messageContent ... 私の問題は、「メッセージの削除」機能を実装したいのですが、その方法がわからないため、その会話の 1 人のメンバーがすべてのメッセージを削除する場合、他のメンバーが削除する必要があることです。他のメンバーもそれらのメッセージを削除するまで、引き続きすべてのメッセージが表示されます。

だから私のアプローチ(明らかに間違ったもの)は、追加の列を追加することでした:deletedByReceiverとdeletedBySender、これは受信者には問題なく機能しますが、送信者がそれらのメッセージを開くと、クエリが言うため、送信したメッセージのみが表示されます:select * from inbox where deletedByReceiver != 1

だから私はコードを求めません、これを解決する方法のアイデアを求めます

4

4 に答える 4

2

私が問題を正しく理解していれば、2 つの条件セットを「OR」するだけで済みます。deleteBySender != 1私が送信者である場合、または私が受信者である場合、メッセージを含める必要がありdeleteByReceiver!=1ます。

次のようなものです:

SELECT * FROM inbox 
WHERE 
    (senderId = <MYID> AND deleteBySender!=1) OR 
    (receiverID = <MYID> and deleteByReceiver!=1)

もちろん、<MYID>は閲覧者のユーザー ID に置き換えられます。

于 2013-11-14T21:47:30.823 に答える
0

送信者と受信者に対して異なるクエリが必要になります。

  • 受信機用(あなたが述べたように)select * from inbox where deletedByReceiver != 1
  • 送信者用select * from inbox where deletedBySender != 1
于 2013-11-14T21:44:44.487 に答える
0

個々のユーザーがそれぞれのビューでメッセージを削除できるようにするには、メッセージとユーザーの間の関連付けテーブルを追加する必要があるようですmessageId, userId。表の行は、このメッセージがこのユーザーによって削除されたことを意味します。このテーブルをより一般的なものにして、deleted列 (はい/いいえ) を持つこともできます。そうすれば、許可なども管理できます...

于 2013-11-14T21:45:45.637 に答える
0

メッセージ用と受信トレイ用の 2 つのテーブル システムを使用します。データベースのサイズが大きくなりますが、メッセージが常に存在することを許可しますが、受信者はビューからメッセージを削除する必要があります

メッセージ表:

msgid* | 送信者 ID | メッセージ内容 | TS

受信トレイ テーブル:

ID* | msgid_fk | 受信者 ID

メッセージを読むには:

SELECT * FROM メッセージ m JOIN inbox i ON m.msgid = i.msgid_fk WHERE recipientID = '[recipient]'

次に、送信者がメッセージを削除すると、受信者の受信トレイも削除するトリガーを作成できます。これにより、メッセージを一度保存​​するだけで、複数の受信者が同じメッセージを受信できるようになります。

于 2013-11-14T21:54:53.480 に答える