algorytm, rozwiazanie, komunikacja użytkowników, poczta |
algorytm, rozwiazanie, komunikacja użytkowników, poczta |
31.07.2008, 22:01:08
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
witam
chciałbym poznać Wasz sposób na system komunikacji użytkowników w serwisach społecznościowych. co jest potrzebne: - wysyłanie, odbieranie poczty - możliwość usuwania poczty, przenoszenia do kosza - możliwość przeglądania poczty odebranej, wysłanej i tej w koszu w zasadzie to tyle 'kłopotliwych' kwestii. ja zrobiłem tabele poczta i pogubiłem się podczas programowania. czy nie prościej byłoby zrobić 2 tabele: odebrane i wysłane? podzielcie się swoimi rozwiązaniami. pozdrawiam -------------------- aplikacje internetowe | Symfony
|
|
|
31.07.2008, 22:06:07
Post
#2
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 071 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn |
a nie prosciej dac pole okreslajace czy wiadomosc jest w inbox, sent czy trash?
|
|
|
31.07.2008, 22:10:40
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
no prosciej, ale prosze o bardziej wyczerpujaca odpowiedz:)
mam kolumne kosz, mam kolumne przeczytane. ale przeciez u nadawcy moze byc ona w koszu a u odbiorcy juz nie koniecznie:) a to przeciez ten sam wiersz jest. wiec musza byc 2 kolumny z typem wiadomosci - tzn z miejscem skladowania. ale musi tez byc mozliwosc calkowitego usuniecia - nawet z kosza. jak odbiorca usunie ta wiadomosc na stale to u nadawcy nie koniecznie musi byc ona usunieta:) wiec dlatego pomyslalem o dwoch tabelach - tak jak jest w normalnej poczcie. odbiorca i nadawca ma ja na serwerze, lub sobie ja usuwa nie wplywajac na konto pocztowe drugiej strony. -------------------- aplikacje internetowe | Symfony
|
|
|
31.07.2008, 22:23:11
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) |
Kod id | sender | receiver | ... | status ---+--------+----------+-----+---------- 1 | 321 | 123 | ... | unreaded 2 | 321 | 123 | ... | deleted 3 | 321 | 123 | ... | readed 4 | 123 | 321 | ... | readed Inbox for "123": - ID:1, STATUS:unreaded - ID:3, STATUS:readed Trash for "123": - ID:2, STATUS:deleted Sent for "123": - ID:4, STATUS:received, RESPONSE_TO:3 Inbox for "321": - ID:4, STATUS:readed, RESPONSE_TO:3 Sent for "321": - ID:1, STATUS:received and unreaded - ID:2, STATUS:received - ID:3, STATUS:readed and responded (ID:4) Ja bym zrobił to tak Ten post edytował tiraeth 31.07.2008, 22:23:25 |
|
|
31.07.2008, 23:51:10
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
troche nie rozumiem tego twojego zapisu.
dodam ze pisze aplikacje na symfony - pierwszy raz mam do czynienia z tym FW i dla mnie to jest bardzo zamieszane. bo zalozmy sytuacje ze jest 1 tabela no i kolumny z ID odbiorcy nadawcy, jakies flagi czy przeczytane, w ktorym folderze u kogo sie znajduje (folder_odbiorcy, folder_nadawcy) no i user przeglada tylko te z kosza. w koszu sa chyba listy odebrane i wyslane. wiec trzeba zrobic joina do profilu nadawcy i do profilu odbiorcy. takze to tez jest warunek - zeby mozna bylo prosto napisac aplikacje w symfony:) -------------------- aplikacje internetowe | Symfony
|
|
|
1.08.2008, 00:18:18
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) |
Moje rozwiązanie może Ci nie pasować - owszem. Wyjaśnię tylko, dlaczego możliwość usuwania wysłania wiadomości jest rzeczą zbędną. Ja uważam, że to użytkownik otrzymujący wiadomość powinien mieć pełne uprawnienia. Gdy "usunie do Trash" wiadomość, jej status zmieni się na deleted. Gdy usunie ją z Trasha, zmieni się na hidden. Fizycznie wiadomości nie usuwamy, bo musi pozostać ona w "Sent" naszego użytkownika-nadawcy.
Widzę, że próbujesz na siłę zaimplementować funkcjonalność SMTP/IMAP w prostą (z założenia potrzeb) aplikację prywatnych wiadomości. Jeśli o to Ci chodzi, to może z automatu zakładaj skrzynki mailowe z virtuaboxami na sql, stwórz webmaila i ogranicz możliwość wysyłania i odbierania wiadomości do adresatów z Twojej domeny. I voila Będzie to o tyle lepsze rozwiązanie niż tradycyjne PW, że delikwent będzie mógł pobrać wiadomości (zostawiając kopię - ustawienia serwera, nie klienta) na komputer korzystając z np. Outlooka i przeglądać je nawet gdy serwis będzie offline. Oczywiście prosto z Outlooka będzie mógł odpisać lub napisać nową wiadomość Czyli taki "intramail" globalnie |
|
|
1.08.2008, 00:40:16
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
ale czy konieczne jest trzymanie zbednych wiadomosci? jak obydwie strony ja usuna to po co mi ona ma miejsce w bazie zajmowac?
ale czy dobrze rozumuje z tymi dwoma kolumnami? bo jak nadawca zmieni status deleted to nie koniecznie musi oznaczac ze odbiorca tez ma ja miec w koszu. wiec chyba to jest jedyna droga? Cytat Widzę, że próbujesz na siłę zaimplementować funkcjonalność SMTP/IMAP tez o takim czyms myslalem. ale z drugiej strony informacja na maila o nowej poczcie jest motywacja zeby wejsc na strone i przy okazji cos tam poogladac, kliknac reklame:) takze to bym zrobil w ramach pracy dyplomowej ale juz magisterskiej:) jak zdaze oczywiscie. -------------------- aplikacje internetowe | Symfony
|
|
|
1.08.2008, 08:05:48
Post
#8
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) |
Akurat teraz pisałem prywatne wiadomości i ja zrobiłem to na jednej tabeli. Tabela wygląda w skrócie tak:
Kod ID | OD_ID | DO_ID | KATALOG | TYTUŁ ITP... I w katalogu wysłane, sprawdzam po prostu nie od kogo jest wiadomość a do kogo Tak naprawdę cały mechanizm to pobranie danych, przenoszenie i kasowanie wiadomości + kilka ifów żeby w folderze wysłane nie wyświetlało się "Od" tylko "Do" |
|
|
1.08.2008, 08:56:01
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
daj linka do testow:) bo cos za latwo to opisujesz.
-------------------- aplikacje internetowe | Symfony
|
|
|
1.08.2008, 09:03:02
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) |
A nie można po prostu
id | sender | receiver | ... | status_sender | status_receiver To jest chyba najprostsze rozwiązanie. Wysyłający i otrzymujący mają osobną kolumnę na status (kolumny typu ENUM). I tyle. -------------------- |
|
|
1.08.2008, 09:29:27
Post
#11
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
ale czy konieczne jest trzymanie zbędnych wiadomości? jak obydwie strony ja usuną, to po co mi ona ma miejsce w bazie zajmować? Takie rzeczy lepiej przechowywać, bo mogą się potem przydać w razie jakiś kłopotów. Ludzie wysyłają dziwne wiadomości i lepiej je zawsze mieć. EDIT: zresztą jak się nie mylę to tak robią większe portale społecznościowe, a na pewno mają jakiś cel w tym. Ten post edytował Sedziwoj 1.08.2008, 09:30:37 -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
1.08.2008, 09:39:11
Post
#12
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Zrób tak jak radex_p radzi - to jest imho najlepsze rozwiązanie. Dodatkowo weź pod uwagę co pisze Sedziwoj bo faktycznie, lepiej przez jakiś czas przechowywać takie wiadomości "na zapas", nawet jeśli odbiorca i nadawca tą wiadomość usuną.
Według mnie tu zastosowanie znajdzie cron - poprostu napisz prosty skrytp, który raz dziennie uruchomisz z crona, który usunie wszystkie wiadomości oznaczone przez obu userów jako "usunięte" i starsze niż x dni. |
|
|
1.08.2008, 10:02:19
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
to rozwiazanie tez wydaje mi sie najrozsadniejsze -w teorii:)
ale teraz to trzeba napisac w symfony:P dlatego pisalem o czyms bardziej przejrzystym tak zeby jasniej to bylo napisane (kod). -------------------- aplikacje internetowe | Symfony
|
|
|
1.08.2008, 12:09:53
Post
#14
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) |
A nie można po prostu id | sender | receiver | ... | status_sender | status_receiver To jest chyba najprostsze rozwiązanie. Wysyłający i otrzymujący mają osobną kolumnę na status (kolumny typu ENUM). I tyle. Pole powinno być raczej typu SET, ponieważ wiadomość określona jest dwoma parametrami położenie: otrzymane, wysłane, kosz status: przeczytana, nieprzeczytana z których można stworzyć różne kombinacje: np: mogę przenieść nieprzeczytaną wiadomość do kosza, ale chciałbym zachować informację, że jest nieprzeczytana -------------------- |
|
|
1.08.2008, 13:15:36
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
jaki typ kolumn to juz mniej istotna kwestia.
ustalilismy juz jak ma wygladac tabela podsumowujac:
kolumny status_nadawca i status_odbiorca moga przyjmowac wartosci: 0 - normalna wiadomosc 1 - wiadomosc w koszu 2 - wiadomosc usunieta kazda akcja usuniecia zwieksza wartosc w kolumnie status_odbiorca lub status_nadawca. czyli jak user chce przeniesc wiadomosc z folderu odebrane to zmienia sie na 1. jak chce usunac w kosza to zmienia sie na 2 i juz jej nie zobaczy nigdzie. teraz juz pytanie techniczne jak powinno wygladac zapytanie pobierajace dane dla akcji pokazKosz. chcialbym tam polaczyc dane o profilach (nadawca, odbiorca). zalozmy ze jestem zalogowany na idprofil = 2. to bedzie cos takiego?
-------------------- aplikacje internetowe | Symfony
|
|
|
1.08.2008, 13:34:29
Post
#16
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
@AxZx
Moim zdaniem pole status powinno być FK do tabeli z statusami. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
1.08.2008, 15:19:23
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) |
dlaczego tinyint(2) a nie tinyint(1) ?
-------------------- |
|
|
1.08.2008, 16:41:37
Post
#18
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
dlaczego tinyint(2) a nie tinyint(1) ? A co to za różnica? Przecież to i tak nie ma nic wspólnego z długością pola. Cytat Another extension is supported by MySQL for optionally specifying the display width of integer data types in parentheses following the base keyword for the type (for example, INT(4))
-------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
1.08.2008, 17:49:48
Post
#19
|
|
Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) |
A co to za różnica? Przecież to i tak nie ma nic wspólnego z długością pola. Masz rację. Zapomniałem o tym. Zwracam honor -------------------- |
|
|
1.08.2008, 18:55:03
Post
#20
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 14.05.2007 Ostrzeżenie: (0%) |
Ja bym zrobil tak:
Message: MessageId Title Description CreatedAt ReadAt MessageStatus: MessageStatusId MessageId UserId DirectoryId Wyslanie wiadomosci: 1) Tworzysz rekord Message, wypelniasz odpowiednie pola, ReadAt moze byc np. null 2) Tworzysz dwa rekordy MessageStatus: Dla wysylajacego: jego UserId, DirectoryId na rekord slownika Directories z 'Sent' Dla odbierajacego: UserId - id odbiorcy, DirectoryId - 'Inbox' Gdy odbiorca otworzy wiadomosc (i wiadomosc nie jest w DirectoryId - 'Sent'): 1) Odswiezasz rekord z MessageId wpisujac do pola ReadAt aktualna date Usuniecie wiadomosci: 1) Sprawdzasz czy dla kazdego MessageStatus z tym samym MessageId DirectoryId wskazuje na 'Deleted' (nie 'Trash', tam sobie wiadomosci moga lezec) Dzieki temu rozwiazaniu uzytkownicy maja niezalezna kontrole nad wiadomoscia. Rowniez mozna wysylac wiadomosci do wielu uzytkownikow na raz, oszczedzajac miejsce w bazie danych. Tabela MessageStatus nie musi zawierac MessageStatusId, poniewaz mozna uznac ze MessageId + UserId bedzie zawsze unikalne. Ale to kwestia gustu. edit: Dla wygody mozesz potem sobie stworzyc widok w postaci Message + MessageStatus zlaczony po MessageId edit: Oczywiscie nie bedzie informacji o nadawcy i odbiorcy, ale to kwestia komplikacji widoku troche Ale to niech ktos sie pomeczy bo ja spadam do domu Ten post edytował superfrajer 1.08.2008, 19:07:24 |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 20:10 |