miedzna
1.09.2005, 11:03:29
Mam formularz zgłoszeniowy który dodaje osoby do bazy. Zgłasza się np 2000 osób. Po zakonczeniu zgłoszeń musze wylosować spośród zgłoszonych 500 osób. Oczywiście żadna osoba nie może być wylosowana 2 razy, oraz po wylosowaniu musi otrzymać: 1-wylosowany bądź 0-odrzucony.
Chodzi mi o automatyzacje tego procesu, bo później muszę wysłać do wylosowanych maila z info, że wylosowany, oraz do odrzuconych, że odrzucony.
Nie wiem, jak się do tego zabrać, próbowałem na wstępie losować, czyli przy dodawaniu do bazy robię rand(0,1) i juz, ale w ten sposób nie kontroluję liczbę wylosowanych, a muszę wylosować 500 osób.
Jakieś rady?
SELECT DISTINCT *
FROM osoby ORDER BY RAND() LIMIT 0, 500
:?:
miedzna
1.09.2005, 11:15:21
Dzięki, ale możesz więcej szczegołów.
A jakie szczegóły tu objaśniać :?:
Zapytanie ustawia w losowy sposób wszystkie rekordy z tabeli i zwraca pierwsze 500. Distinct gwarantuje że wszystkie będę różne.
Opisy wszystich poleceń znajdziesz, ..., gdzie? w
manualu.
php programmer
1.09.2005, 11:22:07
Miałem kiedyś podobny problem jak pisałem pokera (w pascalu).
Po rozdaniu kart, nie mogły byś użyte jeszcze raz te same karty.
Ja zrobiłem to tak, że:
Jest tablica, zaznaczasz że ostatnim elementem możliwym do losowania (max) jest na początku długość tablicy.
w pętli losujesz liczbę (a dokładniej indeks tablicy) z zakreseu 0 do max
zamieniasz dane w tablicy o indeksie max z danymi w tablicy o indeksie wylosowanym czyli wylosowana osoba leci na koniec tablicy
a max robisz o jeden mniejszy max-- zeby nie wylosowal przypadkiem tej ostatniej osoby przy nastepnym obrocie pętli
i tak w pętli jedziesz tyle razy ile chcesz wylosować różnych osob...
dr_bonzo
1.09.2005, 11:45:35
OT:
OOP:
tworzysz talieKart z kartami (taliaKart = new TaliaKart())
tasujesz talie (taliaKart->shuffle())
wyciagasz z niej karty (taliaKart->drawCard())
zuzyte karty odrzucamy na DiscardPile (po polsku: "na kupke" DP->push( card ) )
gdy jest juz pusta (taliaKart->isEmpty()) to pobieramy karty z kupki ( x = DP->popAllCards()) i dodajemy do decka ( taliaKart->add( x ) )
mozemyt ja potem potasowac (taliaKart->shuffle())
itd.
Pisalem kiedys Black Jacka w JS bez OO -- masakra
miedzna
1.09.2005, 13:55:32
To wszystko pięknie wygląda i działa, ale muszę przeprowadzić takie losowanie jednorazowo i wylosowanym osobom dopisać w bazie 1 - czyli wylosowany. Bo po losowaniu bedę kilkakrotnie odwoływał się do bazy z osobami, żeby sprawdzić, kto został wylosowany, a kto nie. Dodatkowo do wszystkich będę wysyłał maile z info, czy zostal wylosowany, czy nie, wiec muszę w bazie mieć zapisane 1 albo 0, 1-wylosowany, 0-nie wylosowany.
nospor
1.09.2005, 14:00:42
trzeba bylo tak od razu

UPDATE osoby SET wylosowany = 1 ORDER BY rand() LIMIT 500
miedzna
1.09.2005, 14:05:33
Dzięki nospor, o to mi chodziło, że sam na to nie wpadłem...
Pomogłeś już mi kilkakrotnie
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.