Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Tworzenie tabeli
Forum PHP.pl > Forum > Przedszkole
Capellini
Nie jestem zbyt doświadczony jeżeli chodzi o MySQL dlatego proszę Was o radę. Chciałbym stworzyć tabelę, w której będą przechowywane dane na temat graczy w pewną grę. Tabela ta będzie miała 4 albo 5 pól:
-> ID gracza,
-> nazwa gracza,
-> hasło gracza,
-> wynik gracza,
-> ew. miejsce gracza w rankingu.

Zastanawiam się, któremu z tych pól mam ustawić Primary Key. Chyba powinno być to ID, ale chciałbym żebym mógł także szybko odszukiwać graczy o najwyższych wynikach więc chciałbym, żeby ci gracze byli posortowani jakoś wg miejsca w rankingu. I jeszcze jedno pytanie - czy można jakoś ustawić tak, żeby pole określające miejsce gracza w rankingu automatycznie ustawiało się wg wyniku, tzn. żebym przy zmianie wyniku jakiegoś gracza, nie musiał zmieniać miejsca w rankingu danego gracza?
Spawnm
kolejność ustalisz przy wywoływaniu z bazy na pomocą ORDER BY cos DESC ew ASC
id nic do tego nie ma.
a jako key daj:
->ID gracza,
-> nazwa gracza,
-> hasło gracza,

bo to są pola obowiązkowe smile.gif
Capellini
Cytat
kolejność ustalisz przy wywoływaniu z bazy na pomocą ORDER BY cos DESC ew ASC


W takim razie pole Miejsce można by wyrzucić, ale potrzebuję jeszcze, żeby można było szybko określić miejsce gracza mając ID gracza więc musi zostać, tylko że tutaj pojawia się jeszcze jeden problem z tym miejscem. Gdy dodaję nowego gracza, to wcale nie musi on od razu być na ostatnim miejscu, bo jest możliwe, że inni gracze mają wynik ujemny i wtedy musiałbym powiększać o 1, miejsce w rankingu każdemu, co jest pod tym nowym. Czy jest jakieś inne wyjście niż to powiększanie każdemu miejsca o 1?

Cytat
a jako key daj:
->ID gracza,
-> nazwa gracza,
-> hasło gracza,

bo to są pola obowiązkowe


Czyli primary key ustawia się polom, które są obowiązkowe? Właściwie to pole wynik i miejsce też są obowiązkowe więc też mam im ustawić primary key?
Spawnm
od kiedy to może być tylko jeden?
może być kilka, oddziela się je przecinkiem przy tworzeniu np:
  1. CREATE TABLE `test1` (
  2. contact_id INT(10),
  3. name VARCHAR(40),
  4. birthdate DATE,
  5. PRIMARY KEY (contact_id,name)
  6. );
Fifi209
Cytat(Spawnm @ 14.06.2009, 14:30:19 ) *
od kiedy to może być tylko jeden?
może być kilka, oddziela się je przecinkiem przy tworzeniu np:
  1. CREATE TABLE `test1` (
  2. contact_id INT(10),
  3. name VARCHAR(40),
  4. birthdate DATE,
  5. PRIMARY KEY (contact_id,name)
  6. );


Fakt, zakręciłem się.
Capellini
A jak rozwiązać ten problem z ustalaniem miejsc przy dodawaniu nowego gracza? Problem polega na tym, że nowy gracz wcale nie zaczyna z najgorszym wynikiem i nie znajduje się wcale na najniższym miejscu. Więc po pierwsze jest problem z ustaleniem miejsca tego nowego gracza, bo nie widzę innego sposobu niż policzyć, ile jest po prostu osób z wyższym wynikiem od nowego gracza, a po drugie jest taki problem, że tym wszystkim, którzy mają gorszy wynik od nowego gracza trzeba przestawić miejsce o jedno niżej.
Crozin
Dla kolumny id ustaw PRIMARY KEY.
Dla kolumny nazwa_gracza możesz dodać UNIQUE KEY

Powiedz mi jeszcze czy dobrze rozumiem kolumny wynik oraz ranking. Wynik, to wartość zdobytych punktów, a ranking to pozycja gracza na liście najlepszych wyników, czyli przykładowo:
Kod
+-------+---------+
| wynik | ranking |
+-------+---------+
|   123 |       1 |
|   110 |       2 |
|    76 |       3 |
|    75 |       4 |
|    50 |       5 |
+-------+---------+
Dobrze by było abyś w bazie danych przechowywał zarówno wynik jak i ranking użytkownika. Ranking co prawda można by każdorazowo dynamicznie obliczać, ale to niepotrzebny wysiłek dla bazy. I teraz jeżeli chodzi o nadawanie indeksów (teraz to już będzie zwykły indeks, nie primary czy unique). Jeżeli masz zamiar przeszukiwać tabelę na podstawie kolumny wynik to dla niej zakładasz indeks. Jeżeli masz zamiar przeszukiwać ją na podstawie kolumny ranking to dla niej też zakładasz index.
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.