![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 14 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem.
Używam funkcji rand:
i mam problem gdyż 1 miejsce może dostać 1 użytkownik. no ale istnieje dość duża szansa że wypadnie 2 razy to samo miejsce. 5*5 = 25 - tyle jest miejsc - gdy ich braknie będą losowane z następnego zbioru. co zrobić żeby liczby się nie powtarzały ale użytkownikowi musi przyznać unikalne liczby za pierwszym razem. Czy jest możliwe aby mieliło aż do wylosowania unikalnych liczb?? Jeżeli jest taka możliwość to zapewne trzeba będzie to pętlą zrobić tak (IMG:style_emoticons/default/questionmark.gif) no i jak to mniej więcej zrobić. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Sam napisałeś, że liczba kombinacji to 5^2 czyli 25 tak więc tworzysz tabele z dwiema kolumnami jedna dla ciągów tekstowych (choć można to i numerycznie typu 11, 12 choć wtedy nie będzie to łatwe w rozszerzeniu gdyby liczba kombinacji się zwiększyła i byłby liczby dwucyfrowe), druga tinyint która będzie przechowywać informacje o tym czy dana kombinacja jest użyta (0 - nie, 1 - tak).
Uzupełniasz tabele, ręcznie albo pętlą wyłącznie raz i zostawiasz. Oczywiście wszystkie wartości na 0 (nieużyte). No i losowanie odbywa się po stronie sql, nie PHP, za pomocą funkcji RAND() i LIMIT 1 - odsyłam do Google, prosta sprawa. Musisz jedynie po wylosowaniu danej kombinacji np. 1,2 oznaczyć ją jako użytą (flagę ustawiasz na 1). I tak losowania odbywają się aż do momentu gdy wszędzie są jedynki i musisz to wyłapać (albo przed losowaniem sprawdzasz ile jest wolnych, albo po losowaniu gdy nie zwróci Ci żadnej kombinacji). Robisz UPDATE na wszystkich wierszach (25) i ustawiasz znowu na 0. Ten post edytował markonix 17.04.2011, 18:42:18 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 02:51 |