Makary155 Opublikowano 12 Maja 2011 Udostępnij Opublikowano 12 Maja 2011 Mam za zadanie napisać skrypt totolotka. Wprowadzane liczby mam zapisać w tabeli 'lottery' o strukturze: id => int(11) auto_increment - id losu owner => int(11) - id grającego number1 => tinyint(2) number2 => tinyint(2) number3 => tinyint(2) number4 => tinyint(2) number5 => tinyint(2) number6 => tinyint(2) los => int(11) - koszt zakupu losu (?) Wprowadzanie danych już mam, odpowiednio filtrowane i zabezpieczone przed wprowadzaniem duplikatów, jednak nie mogę sobie poradzić ze skryptem samego losowania(mam pominąć fakt iż kilka osób trafi takie same cyfry to dzielą się wygraną). function losuj() { //wylosowanie liczb $arr = array(); while ( count($arr) < 6 ) { $x = mt_rand(1,45); if ( !in_array($x,$arr) ) { $arr[] = $x; } } $wynik=mysql_query("SELECT * FROM lottery"); while($row=mysql_fetch_array($wynik) { //tu sprawdzanie ile trafił liczb, ale jakie?? } } W jaki sposób sprawdzać wyniki losowania z bazy aby było najoptymalniej? Skrypt jest odpalany jakimś darmowym cronem więc zależy mi na szybkości działania. Z góry dzięki za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Maja 2011 Administratorzy Udostępnij Opublikowano 12 Maja 2011 Jeśli pętla while losuje liczby uczestnika, a tabela lottery ma wynik... zapisuj w tabeli wynik posortowany, rozdzielony przecinkami, np. 1,5,6,14,32,44, a to co userowi wylosujesz posortuj i zimploduj. sort($x); $prawidlowe = '1,5,6,14,32,44'; if (implode(',',$x) === $prawidlowe) { /* wygrales */ } else { /* frajer */ } Edit: ah, chcesz sprawdzać ile liczb trafił... no to z kolei explode: $prawilowe = explode(',', '1,5,6,14,32,44'); foreach ($x as $liczba) { if (in_array($liczba, $prawidlowe)) { echo 'trafiles liiczbe' . $liczba; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 12 Maja 2011 Autor Udostępnij Opublikowano 12 Maja 2011 Odwrotnie, tabela lottery ma liczby uczestnika, a pętla while ma wynik losowania do tablicy $arr. Czyli: $number[1]=$row['number1']; $number[2]=$row['number2']; $number[3]=$row['number3']; $number[4]=$row['number4']; $number[5]=$row['number5']; $number[6]=$row['number6']; foreach ($number as $trafienie) { if (in_array($trafienie, $arr) { $i++;} } echo('Trafiłeś $i liczb!'); A co w przypadku gdy gracz kupi kilka losów z różnymi liczbami i np trafi za 3, za 4 i za 6? Albo w przypadku gdy kupi kilka losów z takimi samymi liczbami i trafi 6? Może jakoś zmodyfikować zapytanie? Żeby nie było że ktoś dostał 4 razy wypłaty całej sumy bo kupił 4 losy i miał farta :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Maja 2011 Administratorzy Udostępnij Opublikowano 12 Maja 2011 Ale gdy wylosujesz liczby, można sprawdzić ile osób wygrało - nagroda powinna być podzielona pomiędzy wszystkie osoby prawda? Jak dwie osoby wygrywają szóstkę, a pula to 10mln, to każda dostaje 5mln (-10% podatku ofc). A jak ktoś ma 3, 4 i 6 - no to dostaje za trzy kasę kasę. Mój ojciec tydzień temu miał na jednym kuponie 5 i 3, dostał obie kwoty. Swoją drogą dziwnie to robisz... liczby są losowane jak user wchodzi na stronę? Czyli każdy ma inne? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 13 Maja 2011 Autor Udostępnij Opublikowano 13 Maja 2011 losowanie ma być raz dziennie, cronem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Maja 2011 Administratorzy Udostępnij Opublikowano 13 Maja 2011 I wtedy chcesz sprawdzić ile osób i co wygrało ? Bez sensu. To użytkownik powinien sobie wejść i sprawdzić ;) Nie mniej korzystając z tego co już dałem, możesz zliczyć ile osób trafiło 6,5,4 lub 3 liczby. Nie jest to otymalne, bo wierszy może być dużo, ale da się. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 13 Maja 2011 Autor Udostępnij Opublikowano 13 Maja 2011 Dzięki za pomoc. Mam nadzieje że skrypt nie przekroczy 3 sekund, bo tyle wynosi timeout w tym cronie :) ewentualnie dodam sobie możliwość "ręcznego" losowania Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się