Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wylosowac 500 osób z bazy?
Forum PHP.pl > Forum > Bazy danych
miedzna
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?
NuLL
  1. SELECT DISTINCT *
  2. FROM osoby ORDER BY RAND() LIMIT 0, 500

:?:
miedzna
Dzięki, ale możesz więcej szczegołów.
mike
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
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...
NuLL
php -> Bazy danych
dr_bonzo
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 smile.gif
miedzna
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
trzeba bylo tak od razu biggrin.gif
  1. UPDATE osoby SET wylosowany = 1 ORDER BY rand() LIMIT 500
miedzna
Dzięki nospor, o to mi chodziło, że sam na to nie wpadłem...
Pomogłeś już mi kilkakrotnie smile.gif
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.