Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
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

:?:
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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 559
Pomógł: 6315
Dołączył: 27.12.2004




trzeba bylo tak od razu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  1. UPDATE osoby SET wylosowany = 1 ORDER BY rand() LIMIT 500
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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: 15.10.2025 - 11:25