Private Messages

Yuriy_S

-=PHP-Club=-
Private Messages

Приватные сообщения!
Привет всем!
Делаю я приватные сообщения для форума.
Сделал одну таблицу для них , то есть и входящие и исходящие все в одной таблице. Есть проблема - когда я удаляю например свое входящее сообщение, то у того кто отослал его мне как бы исчезает исходящее, то есть удаляется.
И наоборот, удаляю исходящее свое - у того кому послал удаляется входящее.
Подскажите как решить проблему. Может нада не 1 тиблицу, или....?
Спасибо за внимание.
 

Crazy

Developer
Телепаты в отпуске. Показывай структуру таблиц или жди, когда они вернутся.
 

Alkinoy

Guest
Да у него по моему проблема в том, что одна и таже запись есть как исходящая для отправителя и входящая для получателя! Таблиц пока не видел
 

Yuriy_S

-=PHP-Club=-
таблица состоит из следующих полей:
id, userid, from_user, n, head, message, vrema, mode.
id- лчный ид сообщения,
user_id - ид юзера, которому отправлено сообщение
from_user - имя юзера, который отправил сообщение,
n - ид юзера, который отправил сообщение(for reply),
head - тема сообщения,
message-- само сообщение
далее время и опред. "моды".



таблица то у меня одна! Вот я и спрашиваю, сколько их делать то вообще для этого нада. и .т.п
 

Alkinoy

Guest
Ну так правильно, ты из таблицы сообщение удалил - вот оно пропало и у отправителя и от получателя. Самый простой вариант (совсем не самый лучший!) - дополнительное поле. Типа показывать ли это сообщение в папке исходящих для отправителя. (Тоже для получателя).
 

Crazy

Developer
Если хочется, чтобы с точки зрения пользователей были два экземпляра (один в папке у отправителя, другой -- у получателя), то необходимо выполнить логическое дублирование. Т.е. либо иметь собственную копию всего письма для каждого пользователя (это проще), либо дублировать информацию о состоянии (например, два признака удаленности, как советует Alkinoy).

Я бы сделал через полное дублирование.
 

Yuriy_S

-=PHP-Club=-
так два признака, если я сделаю например доп. поле, и напишу в нем no -не показывать сообщение, то тогда когда я удалю входящее (то есть поставлю no) то и исходящее все равно исчезнет у отправителя, так как будет та же проверка, показывать или исходящее, или нет...
 

Yuriy_S

-=PHP-Club=-
мне бы не очень хотелось, что бы эти сообщения вот так вот копились в базе, нада именно удалять. А если делать поле дополнительное, то представьте, через месяц у меня будет мегов 100 сообщений, которые вот так вот просто валяются...
 

Alkinoy

Guest
Ну так переодически проверяй базу и удаляй те записи, в которых оба поля равны no. Или при каждом изменении признака проверяй второй - если получаются оба no - убивай запись совсем. А если база небольшая - дублируй полностью, если так хочется. Никто ж не запрещает...
 

Alkinoy

Guest
А что ты дублировать хочешь, вообщето? Это надо для каждого юзверя свою таблицу заводить. С сообщениями ему и от него.
 

Crazy

Developer
Автор оригинала: Yuriy_S
так как будет та же проверка, показывать или исходящее, или нет...
Почему "такая же"? У одного будет:

select * from pvtmsg where recepient=$myID and recepientShow=1

у другого (и в другом ящике):

select * from pvtmsg where sender=$myID and senderShow=1


Если хочешь -- свали в кучу:

select *
from pvtmsg
where recepient=$myID and recepientShow=1
or sender=$myID and senderShow=1


Раз в сутки запускаешь:

deleet from pvtmsg where recepientShow=0 and senderShow=0
 

Yuriy_S

-=PHP-Club=-
нада тогда будет что был id-номер у сообщений разый, если сделать просто 2 запроса, то будет одинаковый, значит нада от первого ида к примеру, mktime() отнять например 938, я прав?
 

Crazy

Developer
Автор оригинала: Alkinoy
А что ты дублировать хочешь, вообщето? Это надо для каждого юзверя свою таблицу заводить. С сообщениями ему и от него.
Зачем отдельную? Достаточно добавить поле owner, которое выполняет привязку к владельцу копии.
 

Alkinoy

Guest
Автор оригинала: Yuriy_S
нада тогда будет что был id-номер у сообщений разый, если сделать просто 2 запроса, то будет одинаковый, значит нада от первого ида к примеру, mktime() отнять например 938, я прав?
Тебе же Crazy уже пример показа - где там одинаковый ID сообщения появиться? Каждый раз при запросе приватного сообщения просматривай таблицу сообщений, В которой id отправителя = id юзера и поле "удалено" не равно 0. Вот такие сообщения выводи в графу "Исходящие". Тоже для входящих. Если кто то удаляет сообщение( неважно, вход или исход), проверяй второе поле. Если в обейх дополнительных полях получаются 0 - убивай запись. Так ты и базу получаешь нормального, "одинарного" размера, и убитые мессаги не копятся.
 
Сверху