![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewien problem. Mam np w bazie 100 rekordów każdy z tych rekordów ma id i np kolumnę count - w której jest liczba Chcę wylosować 7 rekordów z tej puli 100 z tym ze te o najwyższym count mają wyświetlać się najczęściej. wiec ORDER by RAND() odpada. może jakieś pomysły. Myślałem żeby zapisywać gdzieś ile dany element był losowany i np. jak osiągnie 7 to potem już go nie biorę pod uwagę ale to troszkę bez sensu... może inne rozwiązanie. EDIT tego typu rzeczy
niedziałają. Wiec trzeba to zrobić po stronie PHP Ten post edytował acztery 30.05.2011, 14:07:26 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
możesz w php losować przedział count z jakiego w danym momencie będziesz losował i dodać go do where.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli masz dwa rekordy, z których chcesz losować pierwszy z prawdopodobieństwem 1/3 a drugi 2/3 to dajesz rand(1,3) i dla wylosowanej 1 wybierasz pierwszy rekord a dla 2 i 3 wybierasz drugi. Tak samo działa powyższy skrypt. Przypisałem dla 100 rekordów liczby od 1 do 10. Rekord, który ma wartość 4 będzie dwa razy częściej losowany od tego, który ma 2 itd., oczywiście zależność prawdopodobieństwa od wartości możesz sobie matematycznie zmienić ... Wytłumaczę dla czterech rekordów. Np. pierwszy rekord=4, drugi=7, trzeci=2, czwarty=1 Zasada jest taka, że sumuję wszystkie wartości rekordów i losuję liczbę od 1 do tej sumy (czyli 14). Tworzę tablicę sum częściowych ($u) $u[1]=4 $u[2]=11 $u[3]=13 $u[4]=14 i sprawdzam pomiędzy którymi wartościami sum leży wylosowana liczba (dzięki $j). Następnie przypisuję jej indeks do wyniku (tablica $r) i wyrzucam ją z tablicy $t żeby zrobić następne losowanie ... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 04:49 |