Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/02/2012, 05:08
Avatar de repara2
repara2
 
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Sistemas de avisos

Hasta donde puedo entender, tienes un sistema de mensajería. Cada mensaje tiene un emisor y un receptor. Tanto emisor como receptor pueden asigarle al mensaje
un "estado" o "carpeta" (enviado, borrado, etc..). Al entrar en el buzón, el usuario ve sus mensajes ordenados por estado.
Más o menos siguiendo con tu enfoque, lo puedes solucionar con una tabla:

Código MySQL:
Ver original
  1. CREATE TABLE `mensajes` (
  2.   `id` int(11) DEFAULT NULL COMMENT 'UNique ID',
  3.   `subject` varchar(128) DEFAULT NULL COMMENT 'Asunto',
  4.   `body` text COMMENT 'Cuerpo',
  5.   `emisor` int(11) DEFAULT NULL COMMENT 'Id del emisor',
  6.   `receptor` int(11) DEFAULT NULL COMMENT 'Id del receptor',
  7.   `estado_emisor` tinyint(1) DEFAULT NULL COMMENT 'El estado según el emisor',
  8.   `estado_receptor` tinyint(1) DEFAULT NULL COMMENT 'El estado según el receptor'
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


Fíjate que este enfoque no es del todo correcto ya que emisor y receptor son conceptos que cambian según el usuario.
Son términos confusos ya que si quiero ver mi buzón de correo tienes que consultar mensajes en los que yo soy a veces receptor y a veces emisor.
Lo mismo ocurre con la palabra 'estado', dices estado cuando quieres decir 'carpeta'.
Pero continuamos con este modelo.
Los estados posibles para un mensaje serían: Inbox, Deleted, Enviados: 0, 1, y 2, por ejemplo
Para enviar mensajes: insertas UN registro donde:

EMISOR, el id del usuario en esta session
RECEPTOR
ESTADO_EMISOR 2, cada vez que el usuario envia, se guarda en enviados
ESTADO_RECEPTOR 0, para el receptor, inicialmente el mensaje va a la bandeja de entrada

Para mostrar el buzón del usuario actual, o sea, los mensajes que me han enviado a MI:
Código PHP:
Ver original
  1. select * from mensajes where emisor = $myUserId;
Para mostrar una carpeta de mi buzón:
Código PHP:
Ver original
  1. select * from mensajes where emisor = $myUserId and estado = $estado;

Para cambiar un mensaje de estado, simplemente haces update de un mensaje concreto:
Código PHP:
Ver original
  1. update mensajes set estado = $estado where id = $id;

Tu problema es que un mismo mensaje guarda estados correspondientes a usuarios diferentes, de allí la confusión al aplicar los filtros.
Una posible solución es que cada vez que se envíe un mensaje, insertes DOS registros, uno para el emisor y otro para el receptor. Así, cada
usuario puede hacer lo que quiera con el registro y no te complicas la vida.
Espero que te sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.