Pętla az do spełnienia warunku
Scripting
29.02.2012
Mam taki kod:
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 jak to zrobic? Tzn wiem ze petle trzeba dodac, ale niewiem jak, probowalem 1h i mi nie wychodzilo, zrobi mi ktos to? ;/
<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 jak to zrobic? Tzn wiem ze petle trzeba dodac, ale niewiem jak, probowalem 1h i mi nie wychodzilo, zrobi mi ktos to? ;/
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ąć.
Lepiej napisz co chcesz dokładnie osiągnąć.
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.
w pętli losować ciągle nową liczbę, i sprawdzać czy istnieje rekord w bazie.
No a wynik sprawdzenia bazy przechowywać w zmiennej.
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 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
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 ?
Scripting
01.03.2012
Niestety nie znam sie na tym, tak bardzo 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.
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.
G[o]Q
01.03.2012
wywołasz tą funkcję w samej sobie
ehh rekurencja jest jeszcze gorszym pomyslem od iteracji szczególnie ze mogłby sobie zepsuc skrypt nie wiedząc czemu
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
Użytkownik Scripting edytował ten post 01.03.2012 16:06
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.
Scripting
01.03.2012
Hmm, no nie mam pojecia 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
$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
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
Użytkownik Scripting edytował ten post 02.03.2012 16:51
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
Użytkownik Scripting edytował ten post 02.03.2012 16:51
sebul
02.03.2012
Tak się zastanawiam po co jest Ci potrzebne to losowanie? Do czego wykorzystujesz kolumnę "id"?
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
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
@Po co mi to? No to juz pozostanie tajemnica, robie pewien projekt do ktorego potrzebuje losowania identyfikatora
sebul
02.03.2012
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.@Po co mi to? No to juz pozostanie tajemnica, robie pewien projekt do ktorego potrzebuje losowania identyfikatora
G[o]Q
02.03.2012
dalbym ci gotowy kod no ale pozwól ze
@Sebul a sprawdzales co sie dzieje jak masz 10 recordów o id 1-10 i usuniesz nr 5 ??
to juz pozostanie tajemnica
@Sebul a sprawdzales co sie dzieje jak masz 10 recordów o id 1-10 i usuniesz nr 5 ??
sebul
02.03.2012
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.@Sebul a sprawdzales co sie dzieje jak masz 10 recordów o id 1-10 i usuniesz nr 5 ??
Scripting
02.03.2012
Niestety sposob pobierania kolejnego id odpada poprostu Numery musza byc "niepowtarzalne" - losowane ;d
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
Scripting
03.03.2012
biega o to ze potrzebuje tylko tego wszystko mam zrobione tylko te losowanie zostalo