mysql - mostrar - Diseño de base de datos para almacenar mensajes de chat entre personas
app inventor mysql query (3)
Al principio pensé que cuando una persona lo eliminaba, simplemente podía cambiar A o De a nulo, pero eso le haría perder quién había enviado el mensaje o a quién se dirigía.
Solo debe agregar un campo eliminado que contendrá el ID de la persona que lo eliminó o será nulo. Así que cuando seleccionas registros de la bandeja de entrada tienes algo como:
Seleccione * De los mensajes donde to_id = MyID y deleted_by <> MyID
cuando borra el mensaje, verifica si el campo eliminado es nulo, si es que actualiza el campo eliminado con MyID, si no lo es (significa que la otra parte lo eliminó también) borra el registro.
Si desea tener la misma funcionalidad para hilos en lugar de mensajes (es decir, administrar la conversación y no un mensaje a la vez), debe tener otra tabla (MessageThreads) en la que tenga los campos from_id, to_id, deleted_by junto con un campo thread_id . en la tabla de mensajes, sustituye el from_id to_id y deleted_by con el thread_id.
Estoy tratando de construir un sistema de mensajería / chat. que puede almacenar la conversación entre dos personas en orden cronológico. Además, si el usuario A elimina la conversación, el usuario B aún debería tener acceso a la conversación hasta que desee eliminarla.
Bandeja de entrada: todos los mensajes recibidos por el usuario de varios usuarios se mostrarán con el último mensaje de ese hilo en particular.
Pantalla de conversación: orden cronológico de la conversación entre el usuario A y el usuario B
Esta es la estructura básica de la base de datos que he creado. ¿Debo almacenar los mensajes dos veces en la base de datos?
- carné de identidad
- to_id
- from_id
- mensaje
- marca de tiempo
- leer
Habrá dos mesas. nodos nodo_usuario
En la tabla de nodos,
- node_id
- título
- mensaje
- marca de tiempo
En la tabla node_user,
- node_user_id (PK)
- node_id
- parent_node_id (para hilos)
- from_id
- to_id
- marca de tiempo
- leer
Cuando el usuario A envía un mensaje al usuario B, primero almacene el mensaje en la tabla de nodos. Y luego, agregue dos registros en la tabla node_user. Cuando el usuario A elimine el mensaje, solo elimine el primer registro en la tabla node_user. Cuando el usuario B borra el mensaje, puede eliminar registros tanto de los nodos como de la tabla node_user.
Mensaje roscado,
- Usa parent_node_id
Usaría una tabla de búsqueda para los mensajes que almacenan quién tiene los derechos para ver ese mensaje
table->message | table->messageUsers
id->0, message->''hi'', user_id->1 user_id->1, message_id->0
user_id->2, message_id->0
De esa manera, si un usuario borra su mensaje, en realidad solo está eliminando su relación con el mensaje, no el mensaje en sí. simplemente los elimina de la tabla messageUsers. o establecer un campo activo a 1 o 0.