Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rotator bannerów - ratio
Viperx
post
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 winksmiley.jpg
Go to the top of the page
+Quote Post
crash
post
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".


--------------------
Go to the top of the page
+Quote Post
Viperx
post
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 sad.gif Ale i tak dzięki za chęci smile.gif Może inne pomysły ?
Go to the top of the page
+Quote Post
reemii
post
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
Go to the top of the page
+Quote Post
Viperx
post
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 smile.gif Ale tylko dla ratio 1:1 sad.gif W innych przypadkach (na przykład 2:1) się nie sprawdzi ale na razie to zastosuje smile.gif Dzięki za pomoc smile.gif

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

Ten post edytował Viperx 15.02.2005, 16:49:16
Go to the top of the page
+Quote Post
dr_bonzo
post
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.
Go to the top of the page
+Quote Post
Viperx
post
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 winksmiley.jpg. Po za tym dodałem jeszcze jedną kolumnę w której wartości początkowe dla każdego wiersza są takie same jak w kolumnie ratio dla tego wiersza. Po każdym wyświetleniu bannera po prostu zmniejszam wartość z tej drugiej kolumny. I gdy w tej ostatniej kolumnie wszystkie bannery będą miały wartość 0 to ... no właśnie. I tu mam problem. W MySQL'u nie jestem zbyt zaawansowany. Szukałem w manualu funkcji która by wypełniła całą kolumnę jedną wartością, ale nie znalazłem. Ale to i tak by się sprawdziło tylko dla ratio 1:1. Tym razem proszę o pomoc w postaci kodu, który by przeleciał całą tabelę i w ostaniej kolumnie (nazwałem ją 'ratio_left') wpisał takie wartości jak w kolumnie przed ostatniej ('ratio'). Jeśli dostanę tą odpowiedź to ten temat będzie można oficjalnie zamknąć winksmiley.jpg Dzięki wszystkim za pomoc smile.gif
Go to the top of the page
+Quote Post
Kocurro
post
Post #8





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


masz:

1)

  1. UPDATE `tabelka` SET `pole` = 'wartosc' WHERE 1


Uaktualni Ci cała tabelkę `tabelka` i wpsize do wszystkich pól `pole` jedną wartość 'wartosc'

2)

  1. UPDATE `tabelka` SET `pole` = `inne_pole` WHERE 1


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
Go to the top of the page
+Quote Post
hawk
post
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.
Go to the top of the page
+Quote Post
Kocurro
post
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 winksmiley.jpg

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
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 - 07:01