Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacja n:m dla jednej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
klapaucius
Mam problem z zaprojektowaniem bazy danych. Powiedzmy, że tworzę stronę na zasadzie facebooka, gdzie jest tabela "uzytkownik". I chciałbym zrobić system "znajomych". Jak to zrobić w najprostrzy sposób?

Wymyśliłem coś takiego, ale do końca sam nie wiem jakby to miało działać.



Czy można zrobić to taki sposobem mniej więcej jak przedstawiłem? Czyli relacją "wiele do wielu" dla jednej tabeli?
Michael2318
A nie myślałeś, aby zorbić dwie tabele, w taki sposób:
Tabela `users`:
Cytat
| user_id | username | user_email | user_password | // coś tam jeszcze, co potrzebujesz


oraz tabela `friends`:
Cytat
| user_id | friend_id |


na obydwie komórki nadajesz index i teraz, przykładowo wyciągamy znajomych dla usera o ID 15:
  1. SELECT u.username, u.user_id, f.user_id, f.friend_id FROM `users` u LEFT JOIN `friends` f ON f.user_id = u.user_id WHERE u.user_id = 15;


Jako zwrot otrzymasz wszystkie potrzebne informacje o znajomych użytkownika o id 15 smile.gif
Ten sposób przetrzymywania danych jest też o tyle dobry, że usuwanie/dodawanie nowych znajomych jest bardzo proste, nie trzeba praktycznie nigdzie latać, zmieniać cudować - zwykły insert czy delete do bazy i po sprawie.

EDIT:

Teraz rozkminiłem, że w pierwszym poście chyba zaproponowałeś rozwiązanie tego samego typu facepalmxd.gif No trudno, w każdym bądź razie tego typu sposób jest OK smile.gif
klapaucius
Ok, skoro tego typu sposób jest okej to trochę dopracowałem go i zrobiłem coś takiego:

Czyli jak stworzyłem tabelę "znajomi" zawierającą pola: "zapraszajacy" i "zaproszony" będące kluczami obcymi tabeli uzytkownik.
Do tego dałem też pole "status" mówiące o tym, czy użytkownik "zaproszony" przyjął zaproszenie : )

@Michael2318
Dzięki za podsunięcie pomysłu z tym LEFT JOIN.

Pozdrawiam serdecznie.
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.