![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mój problem wygląda następująco:
mam już w pełni gotowy rotator bannerów, ale do wybierania bannera do wyświetlenia używam funkcji rand(), a chce żeby bannery wyświetlały się bardziej proporcjonalnie względem innych. I tu wpadłem na pomysł żeby zastosować ratio. Bardzo proszę o podrzucenie mi jakiegoś pomysłu jak bym mógł to wprowadzić do skryptu. Nie chodzi mi o dokładny skrypt, tylko opis jak mógłbym to wykonać. Dobrze by było żeby też zbytnio nie spowalniało mojego skryptu. Bannery są przechowywane w bazie MySQL jak by to coś zmieniło ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 196 Pomógł: 2 Dołączył: 17.01.2004 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Możesz dodaj jakieś pole int do każdego wpisu, przy wylosowaniu tego właśnie banera inkrementować tą wartość. Przy losowaniu uwzględnić wartość tego pola przez np. ORDER BY ratio DESC Przez co będą losowane w miarę "sprawiedliwie".
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hmm. Rozwiązanie ogólnie dobre, ale tylko wtedy gdy się nie dodaje nowych bannerów. Bo jak już wcześniej dodane bannery są po kilku tysiącach wyświetleń to nowo dodany będzie się wyświetlał bez przerwy aż dojdzie do wartości pozostałych. Więc to rozwiązanie mi nie pomoże
![]() ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
to przy wstawianiu nowego wartość tego pola ustawiasz jako najmniejszą, najwiekszą lub średnią wartość ze wszystkich banerów i po kłopocie.
Ew. inne rozwiązanie - robisz sobie drugą tabelę z samymi id banerów i z niej losujesz. Wylosowany usuwasz z tabeli, jak nic nie zostanie to przed losowaniem zapełniasz tabelę. Przy dodawaniu nowego po prostu dodajesz id do tabeli. Żeby nie bawić się dwoma tabelami to dodajesz do tabelki z banerami pole ktore może mieć dwie wartości 1 i 0, losujesz tylko z tych co mają np. 1 i po wylosowaniu zmieniasz na 0, jak są same zera to wszystkie zmieniasz na 1. Możliwości jest multum - można by tak jeszcze wymyslać i wymyslać... Ten post edytował reemii 15.02.2005, 16:42:06 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
No to już troche lepsze rozwiązanie
![]() ![]() ![]() ![]() Po edycji przez reemii: Dwie tabele raczej odpadną. To by zbyt zaśmiecało bazę danych. Ale ten ostatni pomysł myślę że po drobnych usprawnieniach może się sprawdzić dla innych ratio. Dzięki ![]() Ten post edytował Viperx 15.02.2005, 16:49:16 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
No to dodaj rekord z ratio X, X razy.
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 28.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo:
Za dużo z tym mieszania, bo dodając banner przez panel administracyjny podaną liczbę wyświetleń trzeba by dzielić przez ratio i dodać banner kilka razy do bazy. Pomysł reemii już częściowo zaimplementowałem do skryptu w ten sposób że do kolumny ratio wpisuje ratio bannera (np. 1, 2, 200 ![]() ![]() ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
masz:
1)
Uaktualni Ci cała tabelkę `tabelka` i wpsize do wszystkich pól `pole` jedną wartość 'wartosc' 2)
Uaktualni Ci cała tabelkę `tabelka` i wpsize do wszystkich pól `pole` wartość pola `inne_pole` z tego samego rekordu. Mam nadzieję, że dobrze Cię zrozumiałem. Pozdrawiam btw -> co to kolorowanie skłądni takie denne ? Ten post edytował Prometeus 16.02.2005, 12:06:07 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Matematycznie rzecz biorąc, "ratio" powinno oznaczać, że niektóre bannery wyświetlają się cześciej od innych. Statystycznie: proporcjonalnie do tego nieszczęsnego ratio. Czyli proces bez pamięci. Wtedy sprawa jest prosta: dla każdego bannera umieszczasz w bazie jego wagę, a losując banner trzeba:
- ustalić jakoś kolejność bannerów - policzyć sumę wag - wylosować liczbę od 0 do (suma wag - 1) - sprawdzić, który banner odpowiada wylosowanej liczbie Prosty rozkład prawdopodobieństwa. Natomiast jeżeli proces ma mieć pamięć (pokazanie bannera zmniejsza prawdopodobieństwo pokazania go w przyszłości), to... gorzej. Wtedy musisz określić, jak taki proces ma się zachowywać, i słowo "ratio" na pewno nic tutaj nie wyjaśnia. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
@hawk: jemu chodzi o prosty system
![]() Sam stosuję takie rozwiazanie jak on, i powiem, że sprawdzwa się w miarę dobrze gdy jest nie więcej niż 10 bannerów. Ale gdy jest więcej niż 50 bannerów to robię normalnie bez ratio - na zwykłych polach - wyświetlono i do wyświetlenia. I tak wtedy raz za razem banenr pojawia się żadko. Ten post edytował Prometeus 16.02.2005, 12:30:16 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 07:01 |