←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

PHP
Pętla az do spełnienia warunku

  • +
  • -
Scripting - zdjęcie Scripting 29.02.2012

Mam taki kod:

<table cellspacing="0" width="100%" class="mon">
 <tr><td width="30%">Numer: </td>
  <td>
<?
$db_host = 'localhost'; //adres bazy danych
$db_user = 'root'; // użytkownik bazy danych
$db_password = 'xxx'; // hasło użytkownika bazy danych
$db_name = 'counter'; // nazwa bazy danych
mysql_connect($db_host, $db_user, $db_password);
@mysql_select_db($db_name);
$nr = rand(1, 9);
$sprawdz = mysql_query('SELECT * FROM tablica WHERE id = "'.$nr.'" ORDER BY id DESC');
if(mysql_num_rows($sprawdz) == 0)    {
}
else
{
print "<font color='black'><b>Numer $nr jest juz w bazie danych!</b></font>";
exit;
}
print '' . $nr . ' <input type="hidden" name="nr" value="' . $nr . '">' . "\n";
?>

Tworze pewien skrypt i potrzebuje losowania numeru, dziala bez zarzutu i gdy nr wylosowany znajduje sie w bazie danych pisze "Numer x jest juz w bazie danych", ale chce zrobic, zeby zamiast tego napisu, losowalo dalej, az do skutku wylosowania numeru ktorego niema w bazie danych :P jak to zrobic? Tzn wiem ze petle trzeba dodac, ale niewiem jak, probowalem 1h i mi nie wychodzilo, zrobi mi ktos to? ;/
Odpowiedz

  • +
  • -
Portek - zdjęcie Portek 29.02.2012

Z całym szacunkiem dla Ciebie, ale czy aby na pewno dobrze się czujesz? Co będzie jak w bazie znajdzie się 1mln warunków? Dobijesz bazę samymi zapytaniami o pusty identyfikator.

Lepiej napisz co chcesz dokładnie osiągnąć.
Odpowiedz

  • +
  • -
Zapalka - zdjęcie Zapalka 29.02.2012

@up ma rację, ale tak na upartego można użyć pętli while.
w pętli losować ciągle nową liczbę, i sprawdzać czy istnieje rekord w bazie.
No a wynik sprawdzenia bazy przechowywać w zmiennej.
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 01.03.2012

No nie wiem, dzięki za podpowiedzi, mozliwe ze macie racje. Chce zrobic losowanie numerku od 1 do 9 w tabelce Nr :D Jezeli numerek istnieje to losuje az wylosuje taki, ktorego niema w bazie. Niemam innego pomyslu na zrobienie, niz ta petla, ktora bedzie losowac az spelni warunek, ale licze na wasze podpowiedzi
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 01.03.2012

A może zrobisz funkcję, w której to zrobisz w warunku i po prostu jeżeli istnieje rekord to wywołasz tą funkcję w samej sobie ?
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 01.03.2012

Niestety nie znam sie na tym, tak bardzo :P No chodzi mi o:

Gdy wchodzimy na strone jest tabelka, a w niej jest losowany numer, jezeli numer juz istnieje chce zeby wylosowalo szybko kolejny, bez potrzeby odswiezania strony.
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 01.03.2012

wywołasz tą funkcję w samej sobie


ehh rekurencja jest jeszcze gorszym pomyslem od iteracji xD szczególnie ze mogłby sobie zepsuc skrypt nie wiedząc czemu
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 01.03.2012

chodzi o to zeby losowalo taki numerek, ktorego niema w bazie danych ;) To co proponujecie?
Użytkownik Scripting edytował ten post 01.03.2012 16:06
Odpowiedz

  • +
  • -
Portek - zdjęcie Portek 01.03.2012

Pobrać wszystkie numery do tablicy i względem tej tablicy losować - nadal rozwiązanie bez sensu, bo co będzie przy tablicy z 1mln elementów? Choć to lepsze wyjście niż dobicie mySQL.
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 01.03.2012

Hmm, no nie mam pojecia :P No ale macie racje, ale chyba innego sposobu niema ;/ chyba, zeby losowalo kolejny numer z bazy danych ;)
$sprawdz = mysql_query('SELECT * FROM tablica WHERE id = "'.$nr.'" ORDER BY id DESC');


sprawdzalo jaki jest ostatni numer w bazie danych w "tablica" i przy polu id wyskakiwal by kolejny numer poprostu ;d
Użytkownik Scripting edytował ten post 01.03.2012 17:47
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 02.03.2012

to co pomozecie mi z tym?
bo to bedzie losowalo tak:
$nr = rand(111111, 999999);

na razie malo rekordow jest w bazie, wiec rzadko bedzie sie zdarzac ze jest wylosowany wlasnie chyba ;P
Użytkownik Scripting edytował ten post 02.03.2012 16:51
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.03.2012

Tak się zastanawiam po co jest Ci potrzebne to losowanie? Do czego wykorzystujesz kolumnę "id"?
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 02.03.2012

Pobrać wszystkie numery do tablicy i względem tej tablicy losować - nadal rozwiązanie bez sensu, bo co będzie przy tablicy z 1mln elementów? Choć to lepsze wyjście niż dobicie mySQL.


a najlepszym wyjsciem będzie
do{
1 - losowanie
2 - sprawdzenie czy wylosowany numer jest w tablicy tymczasowej z wylosowanymi numerkami
2.1 jesli tak to continue
2.2 jesli nie to dodanie go na koncu tablicy
}while(warunkiem zatrzymania pętli musi byc sprawdzenie czy ilosc elementów tablicy tymczasowej jest = ilosci liczb ktore chcielismy wylosowac -1);

w php'ie masz o tyle dobrze ze nie musisz definiowac rozmiaru tablicy na wejsciu potem mozesz oczywiscie sprawdzic czy identyfikatory z tablicy tymczasowej są w bazie czyli wykonanie jednego zapytania no i jesli któregoś nie ma to dolosować zamiast niego inny na zasadzie
random(0,x-1) or  random (x+1,max)
i potem wybrać któryś z recordów
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 02.03.2012

hehe przedstawiles to w sposob zrozumialy tylko dla osob ktore naprawdę sie na tym znaja, a ja licze na jakies rozwiazanie "gotowca" od was. Nie myslcie ze czekam na gotowe i nic nie robie, proboje, czytam ale nie wychodzi mi w zaden sposob.

@Po co mi to? No to juz pozostanie tajemnica, robie pewien projekt ;) do ktorego potrzebuje losowania identyfikatora ;)
sebul (02.03.2012 19:56):
Skoro robisz pewien projekt i to taka tajemnica, że nie możesz nawet napisać do czego potrzebne jest te losowanie, to chyba powinieneś potrafić sam je napisać ^^
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.03.2012

@Po co mi to? No to juz pozostanie tajemnica, robie pewien projekt ;) do ktorego potrzebuje losowania identyfikatora ;)

Sory, że tak pytam, ale nie rozumiem po co jest potrzebne Ci te losowanie. Masz kolumnę "id", z założenia ona jest niepowtarzalna i ciągle rośnie razem z wpisaniem nowego rekordu do tabeli, więc może jednak napisz, co chcesz konkretnie osiągnąć tym losowaniem, bo skoro ma wylosować numer id, którego nie ma w bazie, to chyba jednak lepiej jest brać po prostu kolejny numer po ostatnim rekordzie.
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 02.03.2012

dalbym ci gotowy kod no ale pozwól ze

to juz pozostanie tajemnica


@Sebul a sprawdzales co sie dzieje jak masz 10 recordów o id 1-10 i usuniesz nr 5 ??
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.03.2012

@Sebul a sprawdzales co sie dzieje jak masz 10 recordów o id 1-10 i usuniesz nr 5 ??

Tak wiem, zostanie luka, ale jaki jest sens ją zapełniać? Gdyby autor napisał do czego mu potrzebne jest takie losowanie, to by wszystko wyjaśniło.
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 02.03.2012

Niestety sposob pobierania kolejnego id odpada poprostu :P Numery musza byc "niepowtarzalne" - losowane ;d
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 03.03.2012

skoro nie umiesz zrealizować mojego algorytmu to nie bedziesz potrafil zrobic nic wiecej więc lepiej napisz ocb bo wątpie zebys sam to skonczyl
Odpowiedz

  • +
  • -
Scripting - zdjęcie Scripting 03.03.2012

biega o to ze potrzebuje tylko tego :P wszystko mam zrobione tylko te losowanie zostalo :)
Odpowiedz