Maison développement back-end tutoriel php Conception de base de données de fonctions de base de messages privés

Conception de base de données de fonctions de base de messages privés

Dec 21, 2017 pm 01:33 PM
数据库 消息 Lettre privée

Cet article analyse la mise en œuvre des fonctions de base des messages privés à travers le niveau de la base de données.

Exigences du projet : Fonction de message privé, après avoir envoyé un message privé à l'autre partie, la liste des personnes qui ont envoyé ou reçu le message sera affichée sur ma page de liste de messages privés. Chaque enregistrement de la liste sera uniquement affiché. afficher le dernier message de la conversation. Cliquez sur n'importe quel élément de la liste pour accéder à la page des détails de la conversation par message, où les détails de la conversation sont affichés dans l'ordre inverse. En même temps, vous pouvez supprimer des conversations sur ces deux pages. La page de liste de messages privés supprime toutes les conversations avec l'autre partie et la page de détails des messages privés supprime une certaine conversation. Les enregistrements de conversation sont supprimés unilatéralement sans affecter la visualisation par l'autre partie. .

Environnement logiciel : mysql

Cela dit, en fait, il n'y a que quelques points importants en résumé. Premièrement, chaque enregistrement de la liste de messages privés n'affiche que le dernier enregistrement, et. deuxièmement, suppression unilatérale de l'enregistrement de la conversation sans affecter le visionnage de l'autre partie. Accédez d’abord au tableau de données, puis expliquez-le un par un.

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
Copier après la connexion

Créez une table private_message, description du champ :

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:删除,标记不同消息状态,可以实现统计未读消息数,逻辑删除用户恢复等
Copier après la connexion

Tout le monde devrait être déprimé après avoir vu cela. Comment obtenir deux identifiants d'expéditeur et de destinataire ?

Ici, nous considérons que la suppression unilatérale des enregistrements n'affectera pas la fonction de visualisation de l'autre partie, nous devons donc ici insérer deux données avec le même contenu lors de l'envoi d'un message privé, mais nous devons faire quelques astuces sur user_id etfriend_id. lorsque les données sont insérées deux fois, les user_id etfriend_id des deuxièmes données insérées sont échangés avec les premières données insérées. C'est-à-dire :

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
Copier après la connexion

De cette façon, nos besoins peuvent être satisfaits. Les premier et quatrième enregistrements sont destinés aux utilisateurs 121, et les deuxième et troisième enregistrements sont destinés à 127. Lorsque 121 supprime le premier ou le quatrième enregistrement, cela n'affectera certainement pas la visualisation par 127 du deuxième enregistrement. ! ! !

D'accord, vous pouvez désormais vous occuper d'autres exigences fonctionnelles.
1. Ma liste de messages privés

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
Copier après la connexion

2. Détails de ma liste de messages privés

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
Copier après la connexion

3. Supprimer l'intégralité de la conversation sur ma page de liste de messages privés

UPDATE private_message SETstatus=3 WHERE user_id=121 AND friend_id=1271
Copier après la connexion

4. Supprimer une seule conversation des détails de ma liste de messages privés

UPDATE private_message SET status=3 WHERE id=11
Copier après la connexion

5. Obtenez le nombre de messages non lus de l'utilisateur

SELECT COUNT(*) FROM private_message WHERE user_id=121 AND receiver_id=127 AND status=11
Copier après la connexion

Bien sûr, vous. peut également mettre à jour les messages non lus comme lus, vous pouvez récupérer les utilisateurs supprimés de la corbeille, envoyer des messages système, etc. C'est, je suis sûr que certains étudiants diront, que les données de ce tableau sont redondantes. Chaque enregistrement est inséré deux fois s'il y a beaucoup de contenu ou lors de l'envoi de messages système, les données du tableau sont trop volumineuses. uniquement pour les petites fonctions de messages privés. C'est certainement différent des sites Web de réseaux sociaux à grande échelle, mais nous pouvons également diviser le contenu et créer une nouvelle table de contenu. Ici, l'ID peut être associé pour réduire la redondance des données. De plus, cette conception n’implique pas d’accès simultané élevé ! Lorsqu’il s’agit de haute concurrence, cela nécessite des conceptions et des méthodes plus complexes pour le résoudre !


Lecture connexe :

code source de la fonction de chat en tête-à-tête php chat

Comment rendre l'utilisation des index de bases de données plus efficace ?

Étapes générales et exemples de conception d'une base de données

Ce qui précède représente l'intégralité du contenu de cet article si vous. Si vous avez des questions, n'hésitez pas à nous contacter. Laissez un message dans la zone commentaire !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer complètement l'historique des discussions TikTok Comment supprimer complètement l'historique des discussions TikTok May 07, 2024 am 11:14 AM

1. Ouvrez l'application Douyin, cliquez sur [Message] en bas de l'interface, puis cliquez sur l'entrée de conversation de chat qui doit être supprimée. 2. Appuyez longuement sur n'importe quel enregistrement de discussion, cliquez sur [Sélection multiple] et vérifiez les enregistrements de discussion que vous souhaitez supprimer. 3. Cliquez sur le bouton [Supprimer] dans le coin inférieur droit et sélectionnez [Confirmer la suppression] dans la fenêtre contextuelle pour supprimer définitivement ces enregistrements.

Comment récupérer l'historique des discussions par messages privés supprimés sur Douyin Comment récupérer l'historique des discussions par messages privés supprimés sur Douyin May 06, 2024 pm 01:47 PM

1. Lorsque les utilisateurs suppriment les enregistrements de discussion par message privé de Douyin, ces enregistrements ne peuvent généralement pas être récupérés car il s'agit d'une suppression permanente. 2. Cependant, les utilisateurs peuvent contacter le responsable de Douyin et essayer de communiquer pour restaurer l'historique des discussions. 3. Ouvrez l'application Douyin, cliquez sur les trois barres horizontales dans le coin supérieur droit de l'interface [Moi], sélectionnez [Paramètres], faites glisser vers le bas et cliquez sur [À propos de Douyin]. 4. Recherchez et appelez la [Hotline du service client], ou contactez les responsables de Douyin via l'e-mail officiel pour en savoir plus sur la possibilité de restaurer les enregistrements de discussion.

Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Mar 27, 2024 pm 09:39 PM

Le langage Go est un langage de programmation efficace, concis et facile à apprendre. Il est privilégié par les développeurs en raison de ses avantages en programmation simultanée et en programmation réseau. Dans le développement réel, les opérations de base de données font partie intégrante. Cet article explique comment utiliser le langage Go pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données. Dans le langage Go, nous utilisons généralement des bibliothèques tierces pour faire fonctionner les bases de données, telles que les packages SQL couramment utilisés, gorm, etc. Ici, nous prenons le package SQL comme exemple pour présenter comment implémenter les opérations d'ajout, de suppression, de modification et de requête de la base de données. Supposons que nous utilisons une base de données MySQL.

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Comment désactiver le rappel des messages privés de Kuaishou ? Comment fermer les messages pop-up dans les messages privés ? Comment désactiver le rappel des messages privés de Kuaishou ? Comment fermer les messages pop-up dans les messages privés ? Mar 27, 2024 pm 09:21 PM

En tant que plate-forme vidéo courte, Kuaishou permet aux utilisateurs de partager leur vie à tout moment et n'importe où. Les rappels fréquents de messages privés peuvent interrompre notre vie quotidienne. Alors, comment désactiver le rappel des messages privés de Kuaishou ? 1. Comment désactiver le rappel des messages privés de Kuaishou ? Pour désactiver le rappel de message privé de Kuaishou, vous devez accéder au menu des paramètres de Kuaishou. Sur la page d'accueil de Kuaishou, cliquez sur le bouton « Mon » dans le coin inférieur droit, recherchez l'option « Paramètres » et cliquez pour entrer. Après être entré dans le menu des paramètres, recherchez l'option « Paramètres de notification » ou « Paramètres de message ». Après avoir cliqué pour entrer, vous verrez l'option « Rappel de message privé ». Cliquez pour saisir des rappels de messages privés, puis désactivez le commutateur pour ne plus recevoir de rappels de messages privés. 2. Comment fermer les messages pop-up dans les messages privés de Kuaishou ? En plus de désactiver les rappels de messages privés, si vous souhaitez également pouvoir désactiver les rappels de messages privés,

Où puis-je définir la sonnerie des messages privés TikTok ? Comment résoudre le problème lorsqu'il n'y a pas de rappel sonore lors de l'envoi de messages privés ? Où puis-je définir la sonnerie des messages privés TikTok ? Comment résoudre le problème lorsqu'il n'y a pas de rappel sonore lors de l'envoi de messages privés ? Apr 01, 2024 am 11:51 AM

En tant que l'une des plateformes de vidéos courtes les plus populaires au monde, Douyin dispose d'une large base d'utilisateurs et de fonctions riches. La fonction de message privé est un moyen important pour les utilisateurs d'interagir les uns avec les autres, et les sonneries de messages privés sont un moyen important de rappeler aux utilisateurs les nouveaux messages privés. Alors, où puis-je définir la sonnerie des messages privés de TikTok ? Cet article présentera en détail comment définir la sonnerie des messages privés de Douyin et comment résoudre le problème de l'absence de rappel sonore pour les messages privés entrants. 1. Où puis-je définir la sonnerie des messages privés de Douyin ? 1. Ouvrez l'application TikTok : Tout d'abord, ouvrez votre application TikTok. 2. Entrez dans l'interface de message privé : Au bas de la page d'accueil de Douyin, cliquez sur l'icône « Message » pour accéder à l'interface de message privé. 3. Ouvrez les paramètres : dans le coin supérieur droit de l'interface de message privé, cliquez sur l'icône des paramètres (généralement une forme d'engrenage). 4. Sélectionnez les paramètres de message privé : dans le menu des paramètres, recherchez et sélectionnez

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

See all articles