Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak wylosowac 500 osób z bazy?
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


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?

Ten post edytował miedzna 1.09.2005, 11:06:18
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


  1. SELECT DISTINCT *
  2. FROM osoby ORDER BY RAND() LIMIT 0, 500

:?:


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
miedzna
post
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Dzięki, ale możesz więcej szczegołów.
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


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

Ten post edytował php programmer 1.09.2005, 11:42:26
Go to the top of the page
+Quote Post
NuLL
post
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


php -> Bazy danych


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
miedzna
post
Post #8





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




trzeba bylo tak od razu biggrin.gif
  1. UPDATE osoby SET wylosowany = 1 ORDER BY rand() LIMIT 500


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
miedzna
post
Post #10





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Dzięki nospor, o to mi chodziło, że sam na to nie wpadłem...
Pomogłeś już mi kilkakrotnie smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 23:54