Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Jaki stworzyć układ tabel dla dużej ilości użytkowników
IceManSpy
post 17.08.2010, 09:44:47
Post #1





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ół?

Ten post edytował IceManSpy 17.08.2010, 09:45:06


--------------------
Go to the top of the page
+Quote Post
thek
post 17.08.2010, 10:42:13
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Ramzaa
post 17.08.2010, 10:44:24
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Ramzaa 17.08.2010, 10:46:12
Go to the top of the page
+Quote Post
IceManSpy
post 17.08.2010, 18:29:45
Post #4





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ś.


--------------------
Go to the top of the page
+Quote Post
Ramzaa
post 17.08.2010, 18:48:10
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
everth
post 17.08.2010, 18:50:53
Post #6





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


A nie lepiej tak?
  1. SELECT * FROM dane WHERE ID IN (SELECT id_znajomego FROM znajomi WHERE ID = ID XX);


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
IceManSpy
post 17.08.2010, 20:57:23
Post #7





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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)?

Ten post edytował IceManSpy 17.08.2010, 20:57:59


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 06:51