Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL]mała gra
Forum PHP.pl > Forum > Przedszkole
maxis88
Witam.
Mam zamiar zrobić a właściwie juz robię prostą gierkę na przeglądarkę ( tekstową ).
Póki co mam 3 tabele : info o graczu ( poziom, statystyki i jakies 24 inne parametry postaci ), spis jego narzedzi ( z ich parametrami i ilością ), spis wszystkich narzedzi w grze ( rowniez z parametrami i innymi duperelami)

Zastanawiam sie tylko, czy nie spadnie wydajnosc strony przy wiekszej ilosci ludzi jak zostawie takie 3 tabele czy moze jednak zapisywac kazdego gracza w osobnej tabeli i w niej wszystko co sie jego tyczy...
czyli tabela "nick gracza" a w niej poziom, statystyki, narzedzia i inne duperele czyli dwie połączone tabele ale kosztem tego, że kazdy gracz bedzie inną tabelą ;P

mam nadzieję, że jasno się wyrazilem ;P
emajl22
skad w ogole taki pomysl? 1 tabela = 1 uzytkownik to dopiero bylaby katastrofa

zostaw tak jak masz teraz
gorden
a po co są tabele? tongue.gif
maxis88
żebym sobie uporządkował masę danych ?
PlayKiller
Cytat
czy moze jednak zapisywac kazdego gracza w osobnej tabeli


Z tego co piszesz wynika, że gdy masz na przykład 100 graczy, to musisz mieć 100 tabeli.
Robisz jedną tabelę i do niej wrzucasz rekordy.

@edit:
Zrób np. tak:
tabela [gracze]:
-> uid,
-> login,
-> password,
-> level,
-> itd...
wiewiorek
Co to za dziwny pomysł żeby każdy gracz był oddzielną tabelą arrowheadsmiley.png
maxis88
wiem , że dziwny pomysł ;P ale wpadł mi w momencie gdy pomyślalem, że jak ( tu z usmiechem ) bedzie 1000 osob ( o ile w zyciu bym sie doczekal tylu ;P)

to jak każdy będzie miał w tabeli "dla wszystkich" po 100 itemow to skrypt szukający danych konkretnego uzytkownika chyba troche sie zamuli ( tak przynajmniej sadze )
i dlatego pomysl zeby kazdy mial swoja tabele w ktorej ma tylko swoje dane ( chociaz tez wydawalby mi sie uciazliwy dlatego pytam jak inni sądzą )

ale juz mam dpowiedź więc dzięki wink.gif
PlayKiller
Cytat
to jak każdy będzie miał w tabeli "dla wszystkich" po 100 itemow to skrypt szukający danych konkretnego uzytkownika chyba troche sie zamuli


Nie doceniasz potęgi baz danych.
modern-web
Ze spokojem; bazy danych nie `zamulisz`.
Byłoby to realne przy 10000 użytkowników non-stop odświeżających stronę wink.gif
To zależy raczej od parametrów stacji roboczej/serwera niż samej bazy.

kombinuj smile.gif
markonix
Cytat(maxis88 @ 29.03.2011, 14:35:29 ) *
to jak każdy będzie miał w tabeli "dla wszystkich" po 100 itemow to skrypt szukający danych konkretnego uzytkownika chyba troche sie zamuli ( tak przynajmniej sadze )


Pamiętaj o podstawach optymalizacji baz typu indeksy i będzie dobrze.
krowal
O matko, każdy świeżak zawsze ma takie pomysły na początku, że chciałby robić tabelę dla każdego użytkownika, skąd to się w ogóle bierze.... A pomyśl jakbyś wtedy napisał zapytanie które wyciągało by 10 ostatnio zarejestrowanych użytkowników sortując od najnowszego no najstarszego ? - podpowiedź: "nie napisałbyś". Są bazy co mają po milion rekordów i sobie radzą. Druga sprawa to to, że jeśli uda ci się osiągnąć milion użytkowników to będziesz zarabiał kupę kasy i zatrudnisz kogoś kto to zrobi lepiej. A teraz pamiętaj, są dwie zasady optymalizacji:
1. Dont do it !
2. Dont do it yet !

Tak więc na razie nawet nie przejmuj się optymalizacją bo sądząc po tym co napisałeś i tak nie zrobisz tego dobrze wink.gif
wmatusiak
Cytat(krowal @ 29.03.2011, 18:59:58 ) *
1. Dont do it !
2. Dont do it yet !


Podpisuje się wszystkimi czterema kończynami.
W temacie nie przejmuj się tym mam tabele gdzie jest kilka milionów rekordów i wszystko śmiga że aż miło wink.gif

Proponuje tabele
Itemy (wszystkie narzędzia w grze, jeden wiersz jedno narzędzie, kolumny to atrybuty opisujące narzędzie)
|
UserItems (narzędzia powiązane z użytkownikiem starcza 2 kolumny user_id i item_id (ewentualnie dodaj trzecią na ilość))
|
Users (wszyscy użytkownicy, kolumny to atrybuty opisujące urzytkownika)

Na początek powinno starczyć, spróbuj wyjść od tego i pokarz co ci wyszło wink.gif
maxis88
Cytat(wmatusiak @ 29.03.2011, 20:50:53 ) *
Podpisuje się wszystkimi czterema kończynami.
W temacie nie przejmuj się tym mam tabele gdzie jest kilka milionów rekordów i wszystko śmiga że aż miło wink.gif

Proponuje tabele
Itemy (wszystkie narzędzia w grze, jeden wiersz jedno narzędzie, kolumny to atrybuty opisujące narzędzie)
|
UserItems (narzędzia powiązane z użytkownikiem starcza 2 kolumny user_id i item_id (ewentualnie dodaj trzecią na ilość))
|
Users (wszyscy użytkownicy, kolumny to atrybuty opisujące urzytkownika)

Na początek powinno starczyć, spróbuj wyjść od tego i pokarz co ci wyszło wink.gif


Właściwie miałem tak skontruowaną bazę z wyjątkiem tabeli UserItems bo mam tam więcej informacji ze względu na to że chce pozwolić na ulepszenia danego itemka dlatego samo id nie pozwoli mi pobrac konkretnego itemu wink.gif

mam jeszcze jeden mały problemik ;P mam w tabeli pole LVL oczywiscie INT... tylko, że jak pobieram z tabeli dane i sortuje wyniki wg LVL to otrzymuje takie coś:


1
10
11
12
13
14
15
16
17
18
19
2


zamiast tego co oczekiwałem wink.gif
da się to jakoś poprawić ?
kuba_pilach
A podaj kawałek kodu odpowiadający za tą czynność...
Wtedy będę mógł ci pomóc, bo jak wiesz... (chyba ;]) nikt nie potrafi czytać w myślach w ten sposób
maxis88
  1. $zaznacz=mysql_query("SELECT * FROM tabela WHERE warunek='$warunek' ORDER BY lvl");


oczywiscie nazwa warunku itp nie są w tym mało istotne więc je zamieniłem ale tak to wygląda ....
kuba_pilach
A więc tak...
Dlaczego jak używasz mysql, masz taga mssql?
  1. $zaznacz=mysql_query("SELECT * FROM tabela WHERE warunek='$warunek' ORDER BY lvl DESC");

Tak się to na ogół pisze... DESC znaczy malejąco, czyli będzie uporządkowywać według levela malejąco, jak w rankingu...
Potem jak pewnie wiesz, musisz jakiegoś while lub fora, by wypisać wszystkie rekordy... Jak chcesz bardziej szczegółowo, to podaj cały kod i z poprawnymi nazwami tabel...


maxis88
DESC tym bardziej nie ... ani ASC ani DSC nie sortuje mi wyników po kolei ( 1,2,3,4,5...) tylko (1,10,11...2,20,21...)
DESC to wgl mi ja odwraca "do gory nogami "


jakies inne pomysły ?
kuba_pilach
Jak masz tablicę gracze, i tam kolumnę lvl to się na ogół daje:
  1. $zapytanie = mysql_query("select * from gracze group by lvl order by lvl desc");
  2. $ile = mysql_num_rows($zapytanie);
  3. ?>
  4. <table>
  5. <tr>
  6. <td>Miejsce</td>
  7. <td>Level</td>
  8. </tr>
  9. <?php
  10. for ($i=0; $i<$ile; $i++) {
  11. $wynik = mysql_fetch_assoc($zapytanie);
  12. echo "<tr>";
  13. echo "<td>".$i."</td>";
  14. echo "<td>".$wynik['lvl'].</td>;
  15. echo "</tr>";
  16. }

Tak się to normalnie robi... jak ci nie działa, to pewnie nie potrafisz pisać ;]
Co do tego group by nie jestem pewien... A pozatym zobacz se to:
order by w mysql



maxis88
  1. $zaznacz=mysql_query("SELECT * FROM monsters WHERE wlasciciel='brak' GROUP BY lvl ORDER BY lvl");
  2.  
  3.  
  4. while($pokaz=mysql_fetch_row($zaznacz)){
  5.  
  6. ...$pokaz[0] , $pokaz[1] ...
  7. }
  8.  

w czym tu mogłem sie pomylić ? manuala do ORDER BY raczej nie potrzebuję bo średnio jest tu się w czym pomylić ...

kod nadal nie dziala poprawnie ( nie sortuje- wszystko inne działa )
// z drugiej strony dzieki za przypomnienie o mysql_fetch_assoc ;P
zegarek84
Cytat(maxis88 @ 3.04.2011, 18:07:02 ) *
w czym tu mogłem sie pomylić ? manuala do ORDER BY raczej nie potrzebuję bo średnio jest tu się w czym pomylić ...
miałem już pisać wczoraj ale zauważyłem, że napisałeś, iż dane pole po którym sortujesz jest typu integer... jednak jak dla mnie to sortowanie jest "słownikowe" - czyli pole owe chyba jednak nie masz w bazie typu integer - nie wiem też jak się zachowuje mysql jeśli zrobisz literówkę i napiszesz coś podobnego do integer - upewnij się co do struktury tabeli...
kuba_pilach
A ja mu radzę się dobrze nauczyć php, bo to co teraz wyprawia...
Pyta się o podstawy! Kup sobie książkę dotyczącą php i mysql... Bo jak będziesz nas się pytał o każdą inną funkcję... A poza tym masz do czegoś google... poszukaj sobie...
maxis88
Cytat(zegarek84 @ 3.04.2011, 19:44:36 ) *
miałem już pisać wczoraj ale zauważyłem, że napisałeś, iż dane pole po którym sortujesz jest typu integer... jednak jak dla mnie to sortowanie jest "słownikowe" - czyli pole owe chyba jednak nie masz w bazie typu integer - nie wiem też jak się zachowuje mysql jeśli zrobisz literówkę i napiszesz coś podobnego do integer - upewnij się co do struktury tabeli...



heh nie wiem jakim cudem ale musiałem chyba patrzyć na inna tabelę ... faktycznie tabela "monsters" w kolumnie LVL ma wartosc "TEXT" co było powodem tego blędu ... takie moje małe niedopatrzenie a wielkie HALO haha.gif

Cytat(kuba_pilach @ 3.04.2011, 21:12:14 ) *
A ja mu radzę się dobrze nauczyć php, bo to co teraz wyprawia...
Pyta się o podstawy! Kup sobie książkę dotyczącą php i mysql... Bo jak będziesz nas się pytał o każdą inną funkcję... A poza tym masz do czegoś google... poszukaj sobie...



Ksiażkę z PHP i MySQL już mam od kilku lat i na tym etapie na którym jestem i uzywam przy pisaniu gry ona mi wystarcza ("PHP 4 od podstaw " Helionu )
i jak napisalem przed chwilą błąd nie tkwil w nieznajomości mysql czy php ale na przypadkowym blędzie przy tworzeniu tabeli więc proszę się nie wymądrzać, bo każdy tu tylko odsyła do manuala czy google jak by nikt nigdy wczesniej nie szukal tam informacji dla siebie ... jesli nie masz nic do dodania to po cholere sie wypowiadasz ... mam pomysl jak pomoc- piszę, a nie doradzam jak sie dalej męczyć bo powoduje to tylko kolejne bezsensowne posty na forum...
kuba_pilach
Sorki za to, ale myślałem, że nic nie potrafisz... Ale jak to tylko niedopatrzenie to spoko...
Ale i tak powinieneś sam do tego dojść... Albo w przeciwnym razie napisać nam jak wygląda tabela closedeyes.gif
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.