[解決済み] php mysqlでメッセージングシステム
質問内容
私のウェブサイトでは、新規登録したユーザーがお互いにメッセージを送ることができる簡単なメッセージシステムを作りました。
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 テーブルに存在しない孤児となったメッセージがないことを確認するために、削除の際にクリーンアップスクリプトが必要になります。
関連
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった