Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Najmniejsza wolna wartość
Forum PHP.pl > Forum > PHP
foxbond
Pytanie jest z tego tematu, jednak szukam jego rozwiązania po stronie php. (może poprzez MySQL nie da się jego rozwiązać?)

Dane pobrane do zmiennej $all:


Chcę się dowiedzieć jaka jest najmniejsza wolna wartość playerItemPlace dla danego playerItemBag

Czyli dla playerItemBag=1 jest to 2, dla playerItemBag=2 i playerItemBag=3 jest to 0


Mam taki kod:
  1. $all = $this->db->fetch_assoc("SELECT * FROM {[table]} WHERE playerId=1 AND playerItemBag=1", "playerItems");
  2. $min = 0;
  3. $ile = 0;
  4. $x = true;
  5. $countall = count($all);
  6. while ($x){
  7. $x=false;
  8. for ($i=0;$countall>$i;$i++){
  9. if ($all[$i]['playerItemPlace']<=$min){
  10. $min = $all[$i]['playerItemPlace']+1;
  11. $x=true;
  12. }
  13. }
  14. $ile++;
  15. if ($ile >48){
  16. $x=false;
  17. }
  18. }
  19. var_dump($min, $ile);


Teoretycznie działa, jednak zawsze wykonuje 48 razy while, a w nim do 48 razy for.

Moje pytanie brzmi jak uprościć ten kod?
Jest on częścią większej ilości kodu wykonywanej, gdy gracz (min. 100 jednocześnie) przekłada przedmioty w ekwipunku. Liczy się każda zaoszczędzona milisekunda.
_Borys_
Przykład w MYSQL:
Tworzę dodatkową wzorcową tabelę tab_2, twoja tabela jako tab_1, w tab_2 jest komórka playerItemPlaceAll i wpisane są wszystkie możliwe wartości po kolei czyli od 0 do 47.
I potem zapytanie dla jednego gracza:
  1. SELECT playerItemPlaceAll FROM tab_2 WHERE playerItemPlaceAll NOT IN (SELECT playerItemPlace FROM tab_1 WHERE playerItemBag = 1)
batman
A nie mogłeś kontynuować w tamtym temacie? Po co zakładać dwa takie same tematy?
Zamykam.
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.