![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Mam do zaprojektowania system prywatnych wiadomości. Problem w tym, że nie ma się to odbywać na zasadzie skrzynki odbiorczej/nadawczej, a po kliknięciu na link ma się pokazywać ostatnie 5 wiadomości pomiędzy dwoma użytkownikami. Czyli mniej więcej coś takiego:
User1: Tekst wiadomości usera1 do usera2 User2: Odpowiedź od usera2 do usera1 User1: Odpowiedź na odpowiedź User2: Kolejna odpowiedź na odpowiedź usera1 (itd) Mój problem pojawia się przy kasowaniu wiadomości. Naturalnym jest, że jeżeli User1 skasuje u siebie rozmowę, to powinna się ona pojawiać nadal u Usera2. Niestety nie mogę wpaść na żadne sensowne rozwiązanie tego problemu na poziomie bazy danych. Może ktoś robił już coś podobnego? Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Naturalnym jest, że jeżeli User1 skasuje u siebie rozmowę, to powinna się ona pojawiać nadal u Usera2. Niestety nie mogę wpaść na żadne sensowne rozwiązanie tego problemu na poziomie bazy danych. Dodatkowe pola:
przy wybieraniu wyciągasz tylko te, które nie mają *deleted ustawionego na 1. Fizycznie z bazy kasujesz tylko te, które mają oba *deleted na 1. (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A jak masz zrobione tabele? Możesz tworzyć np dla każdego usera tabelę, w której trzymasz odebrane i nadane wiadomości. Wtedy sprawa jest prosta, ob każdy jest niezależny.
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat A jak masz zrobione tabele? Możesz tworzyć np dla każdego usera tabelę Jak sobie wyobrażasz np. dziesiątki tysięcy tabel? Poza tym, po co dublować dane? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
OK, ale jak mam rozpoznać które pole należy do którego usera?
Wiadomości wyciągam takim zapytaniem:
Jeżeli użytkownik usuwa rozmowę, to usuwa ja u siebie w całości. Czyli po prostu na liście nie pokazuje mu się nazwa drugiego użytkownika. Jak wtedy wyfiltrować, który użytkownik usunął rozmowę, a który nie? Da się to zrobić na poziomie powyższego zapytania czy muszę to sprawdzać na poziomie PHP? |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Jak rozpoznawać? Przecież masz pola from_id[/] i [i]to_id. Zamiast kasować przez DELETE robisz UPDATE i ustawiasz odpowiednią flagę.
Żeby nie zaciemniać - deleted1 i deleted2, to byłoby odpowiednio from_deleted i to_deleted. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
No tylko, że w takiej historii wiadomości userzy są na zmianę w polach from i to. Musiałbym wtedy sprawdzać kto byl w polu from w pierwszej wiadomości (jako inicjujący rozmowę). Tak jak mówiłem: usunięcie rozmowy przez jednego z użytkowników oznacza, że nie wyświetla mu się żadna wiadomość wymieniana przez daną parę użytkowników.
Ewentualnie zmienić strukturę bazy na coś takiego:
I wtedy przy każdej kolejnej wiadomości zachowywać kolejność userów 1 i 2 (bez względu kto wysyła wiadomość lub odpowiedź) a zapisywać w polu who_sent nadawcę konkretnej (pojedynczej wiadomości). |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 1 Dołączył: 4.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Co powiesz na tabelę na "usunięte" wiadomości.
user_id | message_id Jak user "usunie" rozmowę to wszystkie wiadomości tu ładujesz. Potem co jakiś czas sprawdzasz i jak obaj użytkownicy mają id rozmowy w tej tabeli to usuwasz na stałę. |
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1. Kazdy z userow dostaje swoja kopie wiadomosci == wszystko jest proste, ale zajmuje 2x wiecej miejsca
2. Opcja - twoja - zapisujesz kto wyslal, kto dostal, czy nadawca usunal, czy odbiorca usunal Jesli user usuwa konwersjacje z userem dwa to: * nadane wiadomosci usera ** ustawiasz nadawca_usunal where nadawca = user and odbiorca = user2 * odebrane wiadomosci usera ** ustawiasz odbiorca_usunal where nadawca = user2 and odbiorca = user |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 09:01 |