> Proporcjonalny rotator bannerów w 2-3 zapytaniach

0

Mam sobie taki problemik, który okazał się - niespodziewanie - trudny. Nareszcie coś ciekawego :)
Sprawa wygląda tak: system ma zliczać ilość kliknięć oraz wyświetlać 5 bannerów dobranych tak, żeby proporcjonalnie do innych [data dodania:ilość wyświetleń] były wyświetlone tyle samo razy - tzn. im wcześniej banner dodano, tym więcej ma wyświetleń [http://www.wiaderko.com/cs/partnerzy] - chyba w miarę sensownie wytłumaczyłem? :) Jak nie - ma działać tak, jakby wyświetlał je po kolei, czyli mając 8 bannerów - wyświetla 1-5, 6-2, 3-7 itd. Teraz pewnie całkiem zamotałem. Jak nie rozumiesz co tu jest napisane - to powiedz :P
Problemy są 2:

  1. zliczanie odsłon - przecież nie będę robił 1 zapytania na każdy banner... można to jakoś w jednym zapytaniu zamknąć? A może jakiś lepszy sposób od sql?
  2. jak wyświetlić je proporcjonalnie? data[time();] : wyświetlenia - pewnie wykonanie dzielenia na sporych liczbach będzie trochę trwało...

Jakieś pomysły?

0
  1. Wykorzystaj memcache, albo jakiś inny sposób cachowania, pozwoli to zaoszczędzić trochę na zapytaniach.
  2. Co do tego to ściągnij sobie np. phpfusion i zobacz jak oni tam wyświetlają banery albo ewentualnie poszukaj jportalu.

//edit:to widze, że nie bardzo zorzumiałem pierwszą część :/

0
  1. Chodzi Ci o:
update banners set count = count + 1 where id in ({lista_id})

?

Z drugim musze potestowac i jak zadziala to wysle.

//edit
Takie cos wymyslilem, nie jest zbyt skomplikowane i mysle, ze duzo zzerac nie bedzie:
W tabeli z banerami trzymasz ilosc dni miedzy wrzuceniem danego banera a pierwszym z nich, a pierwszy ma zawsze 1, przykladowo:

1 5 12 50

czyli 1 baner ma liczbe 1, drugi wrzucony 5 dni pozniej niz pierwszy, trzeci 12 dni pozniej niz pierwszy, itp
obliczasz sobie ich odwrotnosci (mozna jeszcze na poziomie sql), czyli mamy:
1 0.5 0.08 0.02 (w zaokragleniu dla ulatwienia)
suma to
1.6
Losujesz liczbe z przedzialu [0-1.6) (lewostronnie domkniety) i patrzysz czy miesci sie w tych przedzialach:

[0-1) - pierwszy baner
[1-1.5) - drugi baner
[1.5-1.58) - trzeci baner
[1.58 - 1.6) - czwarty baner

Jak widac najczesciej bedzie pokazywany ten pierwszy, bo ma najwieksza czesc z przedzialu [0-1.6)

Mysle, ze jest sensowne :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1