Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Jaki stworzyć układ tabel dla dużej ilości użytkowników
Forum PHP.pl > Forum > Przedszkole
IceManSpy
Witam

Zastanawiam się, jaki stworzyć układ tabel, aby w miarę działał serwis. Temat na razie nie ważny smile.gif Więc co mam teraz:
* tabelę rejestracja, w której mam osoby, które się rejestrują
* tabelę dane (tyle będzie wierszy ile użytkowników) - tam są przechowywane dane
I teraz dla każdego użytkownika tworzę nową tabelę, która jest nazwana jego nr ID (losowo wybierany z puli przy rejestracji) do której dodaję nr innego użytkownika tak jakby dodanie do przyjaciół

A jak chcę aby działało:
Mam jedną tabelę z danymi i chcę, aby użytkownik mógł dodawać innych do znajomych. Tylko teraz czy lepiej jest zrobić jak ja napisałem, czyli dla użytkownika o nr 12345 sprawdź tabelę o nazwie 12345 i stamtąd pobrać ID przyjaciół i zrobić select * from dane where id=id_przyjaciela i wyświetlać ? Czy może zrobić olbrzymią tabelę i tam trzymać przyjaciół?
thek
Lepiej jedną dużą. W razie naprawdę ogromu userów zawsze możesz ją partycjonować ale dobrze przemyślany skrypt będzie widział dwukierunkowo. Po akceptacji zaproszenia do znajomych będzie widział, że A jest przyjacielem B niezależnie czy zaproszenie wysyłał A czy B. I zajmie to tylko jeden rekord w jednej tabeli, a nie po jednym rekordzie w dwóch winksmiley.jpg Tylko mnożysz dwukrotnie liczbę wierszy i wprowadzasz ogrom tabel niepotrzebnie.

Ja tak przykładowo rozwiązałem sprawę sąsiedztwa miast. Jeśli kilka miast pokazuje, że jest sąsiadem Warszawy, to Warszawa pokazuje ich jako swoich sąsiadów, choć jednocześnie żadne z miast nie widzi samych sąsiadów Warszawy bezpośrednio, bo nie uznało tych innych miast za swoje sąsiedztwo winksmiley.jpg
Ramzaa
Cytat(IceManSpy @ 17.08.2010, 10:44:47 ) *
* tabelę rejestracja, w której mam osoby, które się rejestrują


Że niby co?! I jak to sobie wyobrażasz to po stronie biednego skryptu?

Cytat(IceManSpy @ 17.08.2010, 10:44:47 ) *
Czy może zrobić olbrzymią tabelę i tam trzymać przyjaciół?


Olbrzymią tabele.

Tak opisałeś swój problem, że nie mam pojęcia co Ty chcesz zrobić. Ale jak się domyślam, to ja zrobiłbym to tak:

Tabela `users`, a w niej:
  • uid - id użytkownika,
  • uname - nazwa użytkownika,
  • upass - hasło użytkownika,

Tabela `friends`, a w niej:
  • fid - friend id, auto increment,
  • uid - id użytkownika
  • myfriend - id mojego znajomego

I dalej to już prosta sprawa, wystarczy proste zapytanie:
  1. mysql_query("SELECT `myfriend` FROM `friends` WHERE `uid` = '$uid'");

I pokaże nam ID wszystkich naszych kolegów. Dalej za pomocą ID kolegi, wybieramy jego imię itd.

Cytat(IceManSpy @ 17.08.2010, 10:44:47 ) *
I teraz dla każdego użytkownika tworzę nową tabelę,


Jeżeli w tym zdaniu się nie pomyliłeś, to może poczytaj trochę jakieś kursy, bo to co napisałeś, przechodzi ludzkie pojęcie, bo zastanów się co by było, gdyby było 1000 użytkowników?

Pozdrawiam.
IceManSpy
Może trochę to pokomplikowałem ale postaram się raz jeszcze rozjaśnić i Was posłuchać. Więc chcę zrobić tak (pomijam tabelę odnośnie rejestracji, gdzie trzymam loginy i hasła):
* założyć tabelę (dane), gdzie będę trzymał dane użytkowników (ID - unikalne dla każdego użytkownika)
* założyć tabelę (znajomi), gdzie będzie osoba o ID XX i jego "przyjaciel" o ID YY (ale nie musi być odwrotnie że o ID YY jest przyjacielem o ID XX)

I teraz ma być tak, że osoba o ID XX będzie szukała wszystkich swoich przyjaciół o ID jakimś tam a potem będzie pobierała dane z tabeli dane dla każdego tego ID. I wtedy muszę robić:
  1. SELECT id_znajomego FROM znajomi WHERE ID = ID XX
A potem przyporządkować do tablicy asocjacyjnej i dla każdego elementu tej tablicy muszę robić:
  1. SELECT * FROM dane WHERE ID = id_znajomego
Tak to ma wyglądać?

Dodam, że może się okazać, że użytkowników może być bardzo dużo, ale powiedzmy na początek 10 tyś.
Ramzaa
Tak, dokładnie tak masz zrobić smile.gif
A wyniki najlepiej podziel na strony (LIMIT).

Mam nadzieję, że naprowadziłem Cię na dobry tok myślenia.
Pozdrawiam smile.gif
everth
A nie lepiej tak?
  1. SELECT * FROM dane WHERE ID IN (SELECT id_znajomego FROM znajomi WHERE ID = ID XX);
IceManSpy
Cytat(everth @ 17.08.2010, 19:50:53 ) *
A nie lepiej tak?
  1. SELECT * FROM dane WHERE ID IN (SELECT id_znajomego FROM znajomi WHERE ID = ID XX);

To chyba będzie lepsze, bo jedno zapytanie więc jedna pętla do napisania dla fetch'a . Chyba, że nie ma różnicy czy zapytanie z podzapytaniem, czy 2 osobne zapytania (1 sztywne i 1 w pętli fetch'ujące)?
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.