[PHP] [ MySQL] Zapytania do SQL

0

Witam wszystkich forumowiczów !
Mam pytanie a zarazem mały problem.
Jestem w trakcie pisania GRY via www i stanąłem na jednej rzeczy
Zapytanie do SQL...
w grze ma być exp + lvl ale dla każdego lvl'a musi być inny exp
'No to zrob zapytania' - Jak bym mial robic zapytania do kazdego lvl
to serwer by od razu padl i teraz pytanie - Jak zrobić optymalne zapytania w stylu:

If lvl='1' i exp='20' to lvl='2' i exp='0' 

oczywiście to nie jest zapytanie po prostu tak to ma mniej więcej działać
Z góry dziękuje za wszystkie wypowiedzi w tym wątku.

0
KalleQ napisał(a)

'No to zrob zapytania' - Jak bym mial robic zapytania do kazdego lvl
to serwer by od razu padl i teraz pytanie - Jak zrobić optymalne zapytania w stylu:

co masz właściwie na myśli? że jak jakaś postać w grze będzie wchodzić na kolejny level, to żal będzie pyknąć krótkiego selecta?

0

Możesz użyć logarytmu naturalnego (see log()).

log(1); //1 level
log(2); //2 level

Zaokrąglasz to np. o 2 miejsca:

round($exp, 2);

I masz ilość expa do konkretnego poziomu...

Anyway porządne gry via WWW co chwila wykonują zapytania (odświeżenie strony ~3 zapytania) i krzywda się nie dzieje, więc nie rozumiem.

0

a nadaje sie jedno długie zapytanie ?
IF lvl='1' i exp='20' or lvl='2' i exp='50' to lvl = lvl + 1 i exp = 0
bo tych logów nie rozumiem a na necie nie ma praktycznie nic na ten temat

0

Toż to nawet MySQLa nie przypomina. Jak sobie wyobrażasz pisanie takich wierszyków pod 500+ leveli?

UPDATE players SET level = level + 1 WHERE id = 12345 AND exp > ROUND(LOG(level+1)*100, 0)

Chyba dobrze. Zamiast "12345" wstawiasz ID gracza którego chcesz zaktualizować.

Zapytanie wykonuje aktualizację w tabeli players zwiększając poziom o 1 jeśli exp jest większy niż wynik log(obecny_poziom + 1) pomnożony przez 100 i zaokrąglony do jednostek.

Tylko na dobrą sprawę, powinieneś to sprawdzać z poziomu skryptu PHP, a nie MySQLa i ewentualnie wtedy wywołać aktualizację levela o 1.

0

Ja zrobiłem to m/w tak

$login=$_SESSION['login'];
$result = mysql_query("SELECT * FROM user WHERE login='$login'");
while($wiersz = mysql_fetch_array($result))
{
echo 'Masz ';
echo $wiersz['lvl'];
echo ' LvL';
echo '<br  />';
echo 'Masz ';
echo $wiersz['exp'];
echo 'pkt Exp\'a';
$exp=$wiersz['exp'];
$lvl=$wiersz['lvl'];
}

$lvl1= "SELECT * FROM user WHERE login='$login' and lvl='1' and exp>='25' or lvl>='2' and exp>='50' or lvl>='3' and exp>='75'";
$temp1=mysql_query($lvl1) or die("Wystąpił błąd z lvl'up");
$ile1=mysql_num_rows($temp1);
if ($ile1==1){
echo 'masz lvl\'upa<br  />';
echo 'zostanie Ci: ';
if ($lvl==1){
$expw='25';
$expzostanie=$exp-$expw;
echo $expzostanie;
echo 'pkt expa<br  />';
}
}

oczywiście zamiast tego

echo 'masz lvl\'upa<br  />';
echo 'zostanie Ci: ';
if ($lvl==1){
$expw='25';
$expzostanie=$exp-$expw;
echo $expzostanie;
echo 'pkt expa<br  />';

trzeba by wpisać UPDATE :)

ale Twój sposób jest bardziej praktyczniejszy :)
tylko teraz zostaje jedna rzecz a dokładnie to

$expzostanie 

Bo mam misje np. za 100pkt na 1 lvl a wymagane pkt na 1 lvl jest np. 25 i chodzi o to żeby te 75 pkt zostało na 2 lvl a jeśli jest za dużo to nawet na 3

Chodzi o to żeby nie tracić tych pkt. tylko żeby przechodziły na następne lvl (chodzi o resztkę pkt a nie wszystkie)

z góry dzięki :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1