1. ホーム
  2. php

[解決済み] php mysqlでメッセージングシステム

2022-02-14 08:11:44

質問内容

私のウェブサイトでは、新規登録したユーザーがお互いにメッセージを送ることができる簡単なメッセージシステムを作りました。 mysql ステートメントは、私のサイトではうまく機能しますが 私の問題は いつ UserA にメッセージを送信します。 UserB に表示されます。 UserB に表示され、そのメッセージは UserA が送信トレイにある場合、何らかの理由で UserB が受信トレイからメッセージを削除した場合、そのメッセージは両方から削除されるため、私はすべてのメッセージを1つのテーブルに格納しています。 今、私が実現したいことは メッセージが受信トレイから削除されても、送信トレイに残っている必要があります。

テーブルの構造は以下の通りです。

id   message    sentby   sentto    created

受信箱.php

$you=$_COOKIE['username'];     
$st= "SELECT* FROM mbox WHERE sentto='$you' ORDER BY ID DESC LIMIT 10";

アウトボックス.php

$you=$_COOKIE['username'];
$st= "SELECT*FROM mbox WHERE sentby='$you' ORDER BY ID DESC LIMIT 10";

解決方法は?

メッセージの内容については、現在のテーブル構造を維持すればよいと思います。 別のカラムや削除済みフラグを追加するよりも、メールボックス用に別のテーブルを用意した方が良いでしょう。

つまり、現在のmboxテーブルですね。

id   message    sentby   sentto    created

次に、user_mailboxes用の別のテーブル

id   user    mailbox    message_id

メッセージを書くときに、messageテーブルに1回、user_mailboxesテーブルにユーザーごとに1回、合計3回の挿入をしなければならないでしょう。

つまり、mboxのデータはこのような感じですね。

id   message     sentby    sentto    created 
1    Hi There    UserA     UserB     2015-01-26
2    Hello Back  UserB     UserA     2015-01-26

そして、user_mailboxesのデータは、このようになります。

id   user        mailbox   message_id
1    UserA       Out       1
2    UserB       In        1
3    UserB       Out       2
4    UserA       In        2

これにより、user_mailboxesテーブルの個々の行を削除することができます。 これにより、将来のアドオンとして、複数のユーザに同時にメッセージを送信したり(ユーザごとに新しい行を作成)、必要に応じて複数のメールボックスを追加したり(受信、送信、ゴミ箱、重要など)できるようになるでしょう。

特定のメールボックスに対するユーザーのメールを調べるには、単に結合を使用します。

SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";

user_mailboxes テーブルに存在しない孤児となったメッセージがないことを確認するために、削除の際にクリーンアップスクリプトが必要になります。