Jak rozwiązać sprawę wiadomości w serwisie ?

0

Nie mam pomysłu jak rozwiązać pewną sprawę wiadomości. Chodzi o to że po wejściu w wiadomości po prawej stronie chciałbym mieć liste z kim pisałem a po wybraniu kogoś z listy z lewej jakby czat czyli co pisalem i co ktoś odpisał.
Zakładając że każdy user ma swoje ID zrobiłbym tabelkę
Conv_mapper

ID ID_moje ID_rozmowcy
1 1 12
2 1 15
Teraz pobierając z tej tabelki dane czyli wybierz wszystkie rozmowy gdzie moje ID = 1 dostane dwa wyniki. Ale jesli wejdzie użytkownik o id 12 na swoje wiadomości to nie zobaczy mnie bo jego ID nie jest w polu moje_ID. Czy zatem mam automatycznie dodawać też wpis taki
ID ID_moje ID_rozmowcy
---------------- ---------------- ----------------
1 1 12
2 12 1
oczywiscie po sprawdzeniu czy nie ma juz takiego wpisu.

Ale jesli juz to jakos rozwiazemy to jak powinna wygladac tabelka z samymi wiadomosciami

ID ID_mapper rozmowa
1 1 czesc
to tez teraz zobaczy ja uzytkownik o ID = 1 bo user o id=12 wybierze z mapera id = 2 a to id nie wystepuje
w tabelce z wiadomosciami ???

no i nie mam pomyslu jak to rozwiązać ?

0

robisz tabelkę dość prostą jedna wystarczy

int id;
int sender; //id wysyłajacego
int recipient; // id odbiorcy
datetime datetime;//czas wysłania
text message; //treść

nic ci więcej do szczęścia nie potrzeba, teraz tylko odpowiednie zapytania które wcale nie są jakoś bardzo złożone. Tam się martwisz o podwajanie, nie powinno tak się stać, jeśli chodzi o rozmowę z jedną osobą to zwykłe WHERE (sender = myid AND recipment = yourid) OR (recipment = myid AND sender = yourid)

Edit. Co do listy z kim pisałeś zastosuj grupowanie

0

Tutaj racja i sortowac po dacie lub id to zachowamy chronoligczne dane. Ale z tym maperem to dobry pomysl ? zeby miec liste z kim pisalismy i zeby ktos mial tez liste z kim pisze ewentualnie ale te dwie tabelki nie sa ze soba polaczone zostaje tylko pobrane ID wlasne i ID odbiorcy

0

Nie rozumiem ciebie teraz. Wszystko co potrzebujesz, żeby zrobić to co opisałeś to ta jedna tabelka. Nie trzeba żadnej dodatkowej tworzyć.

0

Ale nie chce z jednej tabelki ciagnac i grupowac osoby ktore pisly. bobedzie coraz wiecej wpisow i wiecej to bez sensu by bylo chyba brac dane z takiej tabeli. wiec zrobie oddzielnie moze maper i tam bedzie info kto z kim pisze a dopiero potem wczytywanie wiadomosci z tej tabelki o ktorej pisales

0

Najsensowniejszą odpowiedź już uzyskałeś.

Ale owszem, możesz zrobić tabelę (id_odkogo, id_dokogo, id_wiadomosci), drugą tabelę wiadomosci (id_wiadomosci, tresc_wiadomosci), i nawet możesz zrobić trzecią tabelę rozmowy (id_rozmowy, id_wiadomości, nr_w_rozmowie).

Możesz też cudować dowolnie inaczej, tabelę od i do kogo podzielić na dwie, albo konfigurować to dowolnie inaczej.

1

Co ci przeszkadza ilość danych? Podam ci przykład tylko jednej tabelki z portalu który prowadzę 96360 rekordów, zajęte 5,4 MB i posiada zaledwie 10 kolumn ;) tyle danych się nazbierało po niecałych 7 miesiącach działania? Problem? Żaden. Jakbym miał tak rozbijać takie dane jak ty kombinujesz to zamiast 180 tabel bym miał jakieś 700 = utrata wydajności, poprzez masę JOINów i utrudnienie pracy przy kodowaniu.

0

Ja jeszcze nie jestem az tak zaawansowany :) ale dziekuje za pomoc. na razie zdecydowalem sie na te dwie tabelki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1