3

私は現在、自分の論理に固執しています。

snedimg メッセージ用のデータベース テーブルを作成しました

テーブルmessagesはこんな感じ

id | sender_id | reciver_id | msg                      | send_date |
1  | 2         |  6         | hello there i am testing | 2013-01-15 

だから私が完全に立ち往生しているのは、メッセージロジックを削除することです。私が解決方法を理解していない問題は、メッセージuserid 6取得してIDで削除すると、メッセージの送信者もそれを見ることができないということです。

だから私はこれで少し迷っています。誰かが私にロジックのヒントを与えることができれば、私は本当に幸せです

詳細を説明して編集

だから問題は

id | sender_id | reciver_id | msg                      | send_date |
1  | 2         |  6         | hello there i am testing | 2013-01-15 

これがテーブルです。ユーザーはメッセージを受け取り、それを読み、何らかの理由でそれを削除したいと考えています。

問題はDELETE LOGIC.

たとえば、Facebookでは、削除の代わりにアーカイブを使用しています。これは、私が理解できないロジックです

4

2 に答える 2

3

削除時に受信者または送信者IDを-1に設定し、後で両方が-1(または-1になる)かどうかを確認して、その行を削除します。

例えば

on deletion by reciver:
if ($sender_id == -1) {
  $query = "DELETE FROM messages WHERE id=$id";
} else {
  $query = mysql_query("UPDATE messages SET reciver_id=-1 WHERE id=$id";
}
mysql_query($query)

そうすれば、両方が削除するまで引き続き利用できます

編集:
その解決策の追加の考えとして:
2番目のユーザー削除で削除する代わりに両方を-1に設定できるため、一種のアーカイブを取得し、cronjobによって古すぎるものを削除できます。

于 2013-02-02T15:41:13.590 に答える
1

senderによって削除された後でもメッセージを表示したい場合receiverは、次のロジックを使用できます。

  1. という名前のテーブルに新しい列を追加しますdeleted。ここで、値1はメッセージが削除されたことを0意味し、まだ削除されていないことを意味します。
  2. これがreceiver彼らのメッセージを表示しようとする場合:WHERE deleted = 0
  3. これがsender単にすべてを表示する場合。WHERE上記の句は使用しないでください。
  4. メッセージを削除するには、PHP の削除関数で最初に の値を確認しますdeleted。そうであれば、1SQL を使用してテーブルから行を完全に削除できますDELETEdeletedそれ以外の場合は、列の値を次のように更新するだけです。1
于 2013-02-02T15:37:52.763 に答える