Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównywanie wyników losowania
pr0woKator
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 1
Dołączył: 9.02.2012

Ostrzeżenie: (10%)
X----


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! (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mstraczkowski
post
Post #3





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ctom
post
Post #4





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


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! (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pr0woKator
post
Post #6





Grupa: Zarejestrowani
Postów: 63
Pomógł: 1
Dołączył: 9.02.2012

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
ctom
post
Post #7





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


analizowałeś moją propozycję (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Turson
post
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował Turson 24.11.2013, 15:14:02
Go to the top of the page
+Quote Post
pr0woKator
post
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 1
Dołączył: 9.02.2012

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


explode a potem array_intersect($uzytkownika, $wylosowane)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 15:29