Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porównywanie wyników losowania
Forum PHP.pl > Forum > PHP
pr0woKator
Witajcie,


Chciał bym zrobić w swoim serwisie coś na zasadzie lotto - dla zabawy użytkowników.

Ma to działać na zasadzie - użytkownik wybiera 6 liczb z zakresu 1-49, zapisuje je w bazie.
O określonej porze, adminsitrator wybiera 6 liczb i są one porównywane z tymi które wybrali użytkownicy. Jeżeli jest trafienie 3,4,5,6 użytkownik dostaje punkty.

Zastanawiam się w jaki sposób zapisywać wybierane przez użytkowników liczby - w jednej kolumie, czy dla każdej z liczb stworzyć osobną.
Jak to później porównać po wyciągnięciu z bazy, aby zbytnio nie obciążać serwera?

Za wszystkie radzy bardzo dzięki! smile.gif
Turson
Zapisać w sumie możesz tak
user_id | liczby
np. zapisujesz po przecinkach (spacjach czy jak chcesz)
3 | 1,2,3,4,5,6

Swoje wygenerujesz też w ten sposób, explodem rozdzielisz je do tablicy i porównasz czy $liczba_usera[0] == $wylosowana[0], $liczba_usera[1] == $wylosowana[1] itd.
mstraczkowski
Panowie, żyjemy w czasach znormalizowanych tabel w bazach danych.

Moim zdaniem najlepiej by było stworzyć tabelę użytkowników oraz tabelę wybranych liczb.
Rekordy z tabeli wybranych liczb przypisywać do użytkowników za pomocą klucza obcego po np id.

Dzięki temu jak kiedyś będziesz chciał zmienić ilość liczb (np z 6 na 9) to unikniesz dodatkowej roboty.
ctom
Cytat(pr0woKator @ 23.11.2013, 13:52:48 ) *
Zastanawiam się w jaki sposób zapisywać wybierane przez użytkowników liczby - w jednej kolumie, czy dla każdej z liczb stworzyć osobną.
Jak to później porównać po wyciągnięciu z bazy, aby zbytnio nie obciążać serwera?

Za wszystkie radzy bardzo dzięki! smile.gif


ja by zrobił tak ....

T: users
id | ....

T: typy
id | user_id | data-losowania | typ


SELECT user_id , count(id) as ilosc-trafien
FROM typy
WHERE data-losowania = coś-tam-coś-tam AND typ IN (liczy wylosowane)
GROUP BY user_id

i masz listę userów z ilością trafień z danego losowania
com
Cytat
Zapisać w sumie możesz tak
user_id | liczby
np. zapisujesz po przecinkach (spacjach czy jak chcesz)
3 | 1,2,3,4,5,6


Tak proszę nie rób, mstraczkowski mądrze mówi smile.gif
pr0woKator
Cytat(mstraczkowski @ 23.11.2013, 14:16:36 ) *
Panowie, żyjemy w czasach znormalizowanych tabel w bazach danych.

Moim zdaniem najlepiej by było stworzyć tabelę użytkowników oraz tabelę wybranych liczb.
Rekordy z tabeli wybranych liczb przypisywać do użytkowników za pomocą klucza obcego po np id.

Dzięki temu jak kiedyś będziesz chciał zmienić ilość liczb (np z 6 na 9) to unikniesz dodatkowej roboty.



No tak... ale... Liczby zapisywać każda w osobnej kolumnie, czy separować np. przecinkiem.

Później explode, sortowanie od najmniejszej do największej i porównywanie każdej z osobna.

Ale przy np. 100 graczach porównanie każdej liczby daje 36 porównań na gracza. Nie będzie to obciążało za bardzo serwera?
Interesuje mnie najbardziej opytmalne rozwiązanie z tego względu, że graczy będzie napradę dużo.
ctom
analizowałeś moją propozycję questionmark.gif
przecież tak masz rozwiązani gdzie możesz robić losowania ilu liczb chcesz a wyniki dostajesz jednym zapytanie, które też podałem
Turson
Hmm a jakbyś porównał same zmienne?

Np.
$liczby_usera = "1,2,3,4,5,6";
$wylosowane = "1,2,3,4,5,6";

  1. if($liczby_usera==$wylosowane)
  2. {
  3. //sukces
  4. }
  5. else{
  6. //przegrana
  7. }


Oczywiście najpierw trzeba liczby posortować.
pr0woKator
Cytat(Turson @ 24.11.2013, 15:13:49 ) *
Hmm a jakbyś porównał same zmienne?

Np.
$liczby_usera = "1,2,3,4,5,6";
$wylosowane = "1,2,3,4,5,6";

  1. if($liczby_usera==$wylosowane)
  2. {
  3. //sukces
  4. }
  5. else{
  6. //przegrana
  7. }


Oczywiście najpierw trzeba liczby posortować.




Tylko, że wygrana punktów będzie zależała od liczby trafień - od 3 w górę, tak jak jest to w lotto smile.gif
Pyton_000
explode a potem array_intersect($uzytkownika, $wylosowane)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.