PHP/MYSQL - Sortowanie rekordów i dodawanie liczb z przedziału

0

Witam serdecznie,

Musze wykonać docelowo w php funkcje w której wczytuje dane z dwóch kolumn i według jednej wszystko wyświetlić. Później skrypt musi wpisać w jedną z kolumn liczbę z przedziału np od 200 do 250. Tylko rosnąco - ma to być system powiedzmy przydzielaniu slotu użytkownikowi.
Wczytać muszę kolumny userId i typId.

Wczytanie rekordów w PDO mam zrobione bez problemu tylko nie wiem jak rozgryźć pętle by dobrze przydzielało użytkownikowi kolejną cyfrę.
Na pewno muszę zacząć od policzenia wszystkich użytkowników by móc sprawdzać wolne "sloty". Ale później już nie wiem jak do tego podejść ? jakaś tablica by wpisać wolne liczby ? Może jakiś przykład ?

0

Pokaż kod źródłowy.

0

Za mało szczegółów. Trudno będzie rozwiązać Twój problem jeżeli nie dasz kodu źródłowego, w którym jest blad, lub lepiej nie opiszesz co chcesz zroboc, jak wyglądają tabele itd.

Co to znaczy według jednej wyswietlic? Definiujesz wymagania jak klient, nie jak programista :p

0
pol90 napisał(a):

Pokaż kod źródłowy.

<?php
 $dbhost = 'mojedane';
$dbname = 'mojedane';
$dbuser = 'mojedane';
$dbpass = 'mojedane';


   $pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
   $pdo->exec('SET NAMES utf8');
   
   
   // Kwerenda
   $sql = 'SELECT * FROM maps_gg';
   $result = $pdo->query($sql);
?>


					<?php
								foreach ($result as $row)
									{

									$row['userId']
									$row['mapId']


										// miejsce na obliczenia		
												
									 $result->closeCursor();

									}
							?>

Jak widać mam samo, wczytanie danych z bazy danych i wypisanie ich. Kombinuje z pętlą for by policzyć ilość użytkowników i sprawdzić jakie liczby są wpisane w tabele mapId

Desu napisał(a):

Za mało szczegółów. Trudno będzie rozwiązać Twój problem jeżeli nie dasz kodu źródłowego, w którym jest blad, lub lepiej nie opiszesz co chcesz zroboc, jak wyglądają tabele itd.

Co to znaczy według jednej wyświetlić? Definiujesz wymagania jak klient, nie jak programista :p

Jak widać mam tabele maps_gg, w niej przy rejestracji kolejnych użytkowników tworzy się dla każdego rekord. W nim interesują mnie kolumny "userId" - by ich rozróżnić i "mapid" w którym będę wpisywał liczby z zakresu np. 200 - 250 pod warunkiem ,że nie zostały już użyte przez innego użytkownika ( jak się skończy zakres liczb, zostawi domyślnie 0). Skrypt sprawdzania i wpisywanie liczb domyślnie chce uruchamiać jakimś przyciskiem.Wiem że piszę trochę zagmatwale ale mam nadzieję ,że mnie zrozumiecie ;)

0

Musisz wrzucić wszystkie mapid do jakiejs zmiennej, zeby w pętli sprawezac, czy ktorys użytkownik już takie ma. Możesz to zrobić tak:

$takenMapIds = array_column($result, 'mapid');

Teraz w pętli sprawdzasz:

if(!in_array($mapidktorechcedodac, $takenMapIds, true)) {
    // Można przypisać... 
}

Ostatni parametr, true, jest po to żeby PHP nam nie rzutował wartości. Warto używać tego by default żeby uniknąć wtfkow

0
Desu napisał(a):

Musisz wrzucić wszystkie mapid do jakiejs zmiennej, zeby w pętli sprawezac, czy ktorys użytkownik już takie ma. Możesz to zrobić tak:

$takenMapIds = array_column($result, 'mapid');

Teraz w pętli sprawdzasz:

if(!in_array($mapidktorechcedodac, $takenMapIds, true)) {
    // Można przypisać... 
}

Ostatni parametr, true, jest po to żeby PHP nam nie rzutował wartości. Warto używać tego by default żeby uniknąć wtfkow

Dzięki za podpowiedz ,w pierwszym przykładzie podanym przez Ciebie jak bym nie wpisywał wyskakuje mi ,że pierwszy parametr nie jest tablicą.
Udało mi się to samo osiągnąć pomijając PDO i wyświetlając jego błąd ale samo wyszukiwanie istniejących mapId działa:

		$zapytanie = mysql_query("SELECT * FROM `maps_gg`");
									while($wynik = mysql_fetch_array($zapytanie)) 
									{ 

										if ($wynik["mapId"] > 200 && $wynik["mapId"] < 230)									
											echo $wynik["mapId"];
											$uzyte = $wynik["mapId"];
											echo nl2br("\n");
									
									}

Tylko teraz jest pytanie, jak uzyskane w ten sposób istniejące ID w bazie porównać z całą pulą .
I możliwe liczby do wpisania nie użyte do tej pory wpisać poprzez UPDATE.

0

Udało mi się osiągnąć zamierzony efekt :) poniżej kod, jeśli dało by się go przyśpieszyć lub skrócić to zawsze nie pogardzę poradą

						        $zapytanie = mysql_query("SELECT * FROM `maps_gg`");
										$tablica = array();

										
											while($wynik = mysql_fetch_array($zapytanie)) 
											{ 
		 
												if ($wynik["mapId"] > 200 && $wynik["mapId"] < 230) 
													echo $wynik["mapId"];
													$uzyte = $wynik["mapId"];
																									
													for ($x = 200; $x <= 230; $x++)
													{
														if ($x != $uzyte)
														{
															echo $x;
														}
														else
														{
															echo $x;
															array_push($tablica, $x);
														}
													}
											}
										
											$ilosc = count ($tablica);								
											for ($por = 0; $por < $ilosc; $por++)
												{
													$przedzial = range (200,230);
													$array3 =   array_values(array_diff($przedzial,$tablica));
												}

												
							if ($tablica[0] == 0)
								mysql_query(sprintf("UPDATE maps_gg SET mapId = 200 WHERE userId='%s'",$Users->DataRow['playerID']));
							else							
								mysql_query(sprintf("UPDATE maps_gg SET mapId = $array3[0] WHERE userId='%s'",$Users->DataRow['playerID']));

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