Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Usuwanie konta użytkownika, a ilość znajomych u innych użytkowników
Forum PHP.pl > Forum > Bazy danych > MySQL
Kamil Rybczyński
Witam,

jestem w trakcie projektowania systemu komunikacji między użytkownikami oraz listy znajomych.
W zasadzie wszystko jest zakończone, problem tylko jeden.

Każdy użytkownik ma możliwość usunięcia konta i mam problem z rozwiązaniem problemu zmniejszania ilości znajomych o osobę, która usuwa konto.

W tabeli 'users' (tabela danych użytkownika) jest pole 'u_friends', które zmienia swoją wartość zawsze po dodaniu lub usunięciu nowego znajomego.

Ponad to jest tabela 'friends', która zawiera numery id zapraszającego i osoby zaproszonej.

Oczywiście z usunięciem wszystkich wpisów z tabeli 'friends' nie ma problemu, ale jak mam zmniejszyć ilość znajomych u wszystkich osób, którzy mają użytkownika usuwającego swoje konto w znajomych (pole 'u_friends' w tabeli 'users')?
Przecież nie zrobię 500 razy selecta, który sprawdzi pole 'u_friends' i update jeśli osoba ma 500 znajomych smile.gif

Oczywiście otwarty jestem na wszelkie alternatywne sugestie co do rozwiązania tego problemu smile.gif


Swoją drogą, gdybym zrezygnował z pola 'u_friends' w tabeli 'users' i za każdym razem zliczał, np. za pomocą count() ile znajomych posiada użytkownik, to byłoby ciężkie dla typowego serwera ( www.iq.pl - 10 GB ) rozwiązanie?
AxZx
1. pobierasz liste ID osób, które mają tego usera w friends
gdy już masz tablicę userów w php to
2. aktualizujesz bazę
  1. UPDATE user SET u_friend = u_friends - 1 WHERE id IN ($tablica_userow)


razem 2 zapytania.

Cytat
Swoją drogą, gdybym zrezygnował z pola 'u_friends' w tabeli 'users' i za każdym razem zliczał, np. za pomocą count() ile znajomych posiada użytkownik, to byłoby ciężkie dla typowego serwera ( www.iq.pl - 10 GB ) rozwiązanie?


zależy ile userów. na początku to rozwiązanie może być. ale dobrze jest od razu zaprojektować i zrobić app tak żeby było optymalnie nawet i przy 100000 userów.
phpion
Jeżeli korzystasz z w miarę nowego MySQL to proponuję:
- utworzenie odpowiednich relacji usuwających rekordy z tabeli powiązanych (ON DELETE CASCADE ale działa tylko w InnoDB),
- utworzenie triggera do automatycznej aktualizacji liczników przyjaciół (odpalany ON DELETE).
Kamil Rybczyński
Dzięki za tak szybkie odpowiedzi.
Użyłem rozwiązania
  1. UPDATE user SET u_friend = u_friends - 1 WHERE id IN ($tablica_userow)
użytkownika AxZx.
Sprawia wrażenie najmniej skomplikowanego.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.