ホームページ バックエンド開発 PHPチュートリアル 私信メッセージの基本機能データベース設計

私信メッセージの基本機能データベース設計

Dec 21, 2017 pm 01:33 PM
データベース 情報 私信

この記事では、プライベート メッセージの基本機能の実装をデータベース レベルで分析します。

プロジェクト要件: プライベートメッセージ機能、相手にプライベートメッセージを送信した後、メッセージを送受信した人のリストが私のプライベートメッセージリストページに表示され、リスト内の各レコードには最新のメッセージのみが表示されます。会話の様子。 リスト内の任意の項目をクリックすると、メッセージ会話の詳細ページが表示され、会話の詳細が逆順に表示されます。同時に、この 2 つのページで会話を削除できます。プライベート メッセージの一覧ページでは相手とのすべての会話が削除され、プライベート メッセージの詳細ページでは、相手の閲覧に影響を与えることなく一方的に会話記録が削除されます。 。

ソフトウェア環境: mysql

ここまで述べましたが、実際に重要なポイントをいくつかまとめます。1 つはプライベート メッセージ リストの各レコードには最後のレコードのみが表示されるということ、もう 1 つは会話の記録が一方的に削除されるということです。相手の視聴には影響しません。まずデータテーブルに行き、それを一つずつ説明していきます。

CREATE TABLE `private_message` (
  `id` bigint(20) NOT NULL auto_increment COMMENT '主键Id',
  `user_id` bigint(20) NOT NULL COMMENT '发送者Id',
  `friend_id` bigint(20) NOT NULL COMMENT '接受者Id',  
  `sender_id` bigint(20) NOT NULL COMMENT '发送者id',  
  `receiver_id` bigint(20) NOT NULL COMMENT '接受者Id',  
  `message_type` tinyint(4) NOT NULL COMMENT '消息类型,1:普通消息 2:系统消息',  
  `message_content` varchar(500) NOT NULL COMMENT '消息内容',  
  `send_time` datetime NOT NULL COMMENT '消息发送时间',  
  `status` tinyint(4) NOT NULL default '1' COMMENT '消息状态 1:未读 2:已读 3:删除',  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;123456789101112
ログイン後にコピー

private_message テーブル、フィールドの説明を作成します:

id:主键,自增长 
user_id: 发送者id,非真实发送者id 
friend_id: 接受者id,非真实接受者id 
sender_id:发送者id,真实的发送者id 
receiver_id:接受者id,真实的接受者id 
message_type:消息类型,1:普通消息 2:系统消息,区分消息列表,可以发送不同类型的消息内容 
message_content:消息内容 
send_time:消息发送时间 
status:消息状态 1:未读 2:已读 3:删除,标记不同消息状态,可以实现统计未读消息数,逻辑删除用户恢复等
ログイン後にコピー

これを見た後は誰もが落ち込むはずです。2 つの送信者 ID と受信者 ID を取得するにはどうすればよいでしょうか。

ここでは一方的なレコードの削除は相手の閲覧機能に影響を及ぼさないと考えているので、プライベートメッセージ送信時に同じ内容のデータを2つ挿入する必要があるのですが、user_idとfriend_idに工夫が必要です、2 回 データを挿入すると、2 番目に挿入されたデータの user_id と friends_id が、最初に挿入されたデータと交換されます。つまり、

INSERT INTO `private_message` VALUES ('1', '121', '127', '121', '127', '1', 'hello word', '2015-09-09 10:25:43', '2');INSERT INTO `private_message` VALUES ('2', '127', '121', '121', '127', '1', 'hello word', '2015-09-09 10:26:41', '1');INSERT INTO `private_message` VALUES ('3', '127', '121', '127', '121', '1', '你是程序猿吗?', '2015-09-11 10:30:16', '2');INSERT INTO `private_message` VALUES ('4', '121', '127', '127', '121', '1', '你是程序猿吗?', '2015-09-11 10:30:59', '2');1234
ログイン後にコピー

このようにして、私たちのニーズは満たされるのです。 1 番目と 4 番目のレコードは 121 のユーザーが表示し、2 番目と 3 番目のレコードは 127 が表示します。121 が 1 番目または 4 番目のレコードを削除しても、127 による 2 番目のレコードの表示には影響しません。 ! ! !

さて、これで他の機能要件に対処できるようになりました。
1. 私のプライベート メッセージ リスト

SELECT p.id, COUNT(p.id) AS message_count,p.user_id,p.friend_id,p.sender_id,p.receiver_id,p.send_time,p.message_content, u.`name` AS receiver_name,u.img_url AS receiver_image FROM (SELECT * FROM private_message ORDER BY id DESC) p INNER JOIN user u on u.id=friend_id WHERE p.user_id=121 and p.`status` !=3 GROUP BY p.friend_id ORDER BY p.id DESC limit 0,101
ログイン後にコピー

2. 私のプライベート メッセージ リストの詳細

SELECT p.id,p.message_content,p.sender_id,p.receiver_id,p.send_time,u.`name` AS sender_name,u.img_url AS sender_image,uu.`name` AS receiver_name FROM private_message p INNER JOIN user u on u.id=p.sender_id INNER JOIN user uu on uu.id=p.friend_id WHERE p.user_id=121 and p.friend_id=127 and p.`status` !=3 ORDER BY p.id DESC limit 0,101
ログイン後にコピー

3. 私のプライベート メッセージ リストの詳細は、1 つの会話を削除します

UPDATE private_message SETstatus=3 WHERE user_id=121 AND friend_id=1271
ログイン後にコピー

5.ユーザーの取得 未読メッセージの数

UPDATE private_message SET status=3 WHERE id=11
ログイン後にコピー

もちろん、未読メッセージを既読として更新したり、削除されたユーザーをごみ箱から復元したり、システム メッセージを送信したりすることもできます。これは、このテーブルのデータが冗長であると言う学生もいると思いますが、コンテンツが多い場合、またはシステム メッセージを送信する場合、当然、これはテーブル データが大きすぎます。大規模なソーシャル ネットワーキング サイトとは異なりますが、コンテンツを分割して新しいコンテンツ テーブルを作成することもできます。これにより、データの重複を減らすことができます。また、この設計には高い同時アクセスが含まれていません。同時実行性が高くなると、それを解決するにはより複雑な設計と方法が必要になります。


関連書籍:

php チャット 1 対 1 チャット関数のソース コード

データベース インデックスの使用をより効率的にするにはどうすればよいですか?

データベース設計の一般的な手順と例上記がこの記事の全内容です。ご質問がある場合は、コメント欄にメッセージを残してください。

以上が私信メッセージの基本機能データベース設計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

TikTokのチャット履歴を完全に削除する方法 TikTokのチャット履歴を完全に削除する方法 May 07, 2024 am 11:14 AM

1. Douyin アプリを開き、インターフェイスの下部にある [メッセージ] をクリックし、削除する必要があるチャット会話エントリをクリックします。 2. 任意のチャット記録を長押しし、[複数選択]をクリックし、削除したいチャット記録にチェックを入れます。 3. 右下隅の [削除] ボタンをクリックし、ポップアップ ウィンドウで [削除の確認] を選択して、これらのレコードを完全に削除します。

Douyinで削除されたプライベートメッセージのチャット履歴を復元する方法 Douyinで削除されたプライベートメッセージのチャット履歴を復元する方法 May 06, 2024 pm 01:47 PM

1. ユーザーが Douyin プライベート メッセージ チャット レコードを削除すると、永久的な削除となるため、通常、これらのレコードは復元できません。 2. ただし、ユーザーはDouyin公式に連絡し、チャット履歴を復元するために通信を試みることができます。 3. Douyin アプリを開き、[Me] インターフェースの右上隅にある 3 本の水平バーをクリックし、[設定] を選択し、下にスライドして [Douyin について] をクリックします。 4. [カスタマー サービス ホットライン] を見つけて電話するか、公式メールを通じて Douyin 担当者に連絡して、チャット記録を復元する可能性について問い合わせてください。

Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Mar 27, 2024 pm 09:39 PM

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

Kuaishou のプライベートメッセージのリマインダーをオフにする方法は?プライベートメッセージのポップアップメッセージを閉じるにはどうすればよいですか? Kuaishou のプライベートメッセージのリマインダーをオフにする方法は?プライベートメッセージのポップアップメッセージを閉じるにはどうすればよいですか? Mar 27, 2024 pm 09:21 PM

Kuaishou は、短いビデオ プラットフォームとして、ユーザーがいつでもどこでも自分の生活を共有できるようにします。プライベート メッセージのリマインダーが頻繁に表示されると、日常生活が中断される可能性があります。では、Kuaishou のプライベート メッセージのリマインダーをオフにするにはどうすればよいでしょうか? 1. Kuaishou のプライベートメッセージのリマインダーをオフにする方法は? Kuaishou のプライベート メッセージ リマインダーをオフにするには、Kuaishou の設定メニューに入る必要があります。 Kuaishou のホームページで、右下隅の [マイ] ボタンをクリックし、[設定] オプションを見つけてクリックして入力します。設定メニューに入ったら、[通知設定] または [メッセージ設定] オプションを参照し、クリックして入力すると、[プライベート メッセージ リマインダー] オプションが表示されます。クリックしてプライベート メッセージ リマインダーを入力し、スイッチをオフにしてプライベート メッセージ リマインダーの受信を停止します。 2. Kuaishou プライベート メッセージのポップアップ メッセージを閉じるにはどうすればよいですか?プライベート メッセージのリマインダーをオフにするだけでなく、プライベート メッセージのリマインダーもオフにできるようにしたい場合は、

TikTokプライベートメッセージの着信音はどこで設定できますか?プライベートメッセージを送信するときにサウンドリマインダーが鳴らない場合、問題を解決するにはどうすればよいですか? TikTokプライベートメッセージの着信音はどこで設定できますか?プライベートメッセージを送信するときにサウンドリマインダーが鳴らない場合、問題を解決するにはどうすればよいですか? Apr 01, 2024 am 11:51 AM

Douyin は世界で最も人気のあるショートビデオ プラットフォームの 1 つとして、大規模なユーザー ベースと豊富な機能を備えています。プライベート メッセージ機能は、ユーザーが相互に対話するための重要な方法であり、プライベート メッセージの着信音は、ユーザーに新しいプライベート メッセージを思い出させる重要な方法です。では、TikTokプライベートメッセージの着信音はどこで設定できるのでしょうか?この記事では、Douyinプライベートメッセージの着信音を設定する方法と、プライベートメッセージの着信時に通知音が鳴らない問題の解決方法を詳しく紹介します。 1.Douyin プライベート メッセージの着信音はどこで設定できますか? 1. TikTok アプリを開きます: まず、TikTok アプリを開きます。 2. プライベート メッセージ インターフェイスに入る: Douyin ホームページの下部にある [メッセージ] アイコンをクリックして、プライベート メッセージ インターフェイスに入ります。 3. 設定を開く: プライベート メッセージ インターフェイスの右上隅にある設定アイコン (通常は歯車の形) をクリックします。 4. プライベート メッセージ設定を選択します。設定メニューで、検索して選択します。

HTML がデータベースを読み取る方法の詳細な分析 HTML がデータベースを読み取る方法の詳細な分析 Apr 09, 2024 pm 12:36 PM

HTML はデータベースを直接読み取ることはできませんが、JavaScript と AJAX を通じて実現できます。この手順には、データベース接続の確立、クエリの送信、応答の処理、ページの更新が含まれます。この記事では、JavaScript、AJAX、および PHP を使用して MySQL データベースからデータを読み取る実践的な例を示し、クエリ結果を HTML ページに動的に表示する方法を示します。この例では、XMLHttpRequest を使用してデータベース接続を確立し、クエリを送信して応答を処理することで、ページ要素にデータを埋め込み、データベースを読み取る HTML の機能を実現します。

See all articles