Avatar billede limemedia Nybegynder
08. november 2000 - 03:43 Der er 4 kommentarer og
1 løsning

SQL til random banner der favoriserer lavere hitantal

Jeg har den her query der graver ned i min banner database og returnerer ét random banner.

mysql_query(\"SELECT BannerID, Banner, URL, ((BannerID*0)+rand()) AS RandomID FROM $db_table WHERE (((UserID=\'$ID\')AND(Size=\'$Size\'))AND((CountDisplay < MaxDisplay)OR(MaxDisplay = -1))) ORDER BY RandomID LIMIT 0, 1\")

Nu er det blot at tilfældigheden spiller et puds og nogle bannere får flere hits end andre... Jeg vil derfor gerne favorisere de bannere der har en lavere CountDisplay men ikke altid den mindste... (ved tilføjelse af nyt banner vil den favoriseres for meget) men en der har CountDisplay = 10 skal altså have større chance end CountDisplay = 50000.

Hvordan er det lige man udtrykker det i et enkelt SQL udtræk og kan det lade sig gøre ?

Byg meget gerne videre på mit ovenstående eksempel.
Avatar billede limemedia Nybegynder
08. november 2000 - 16:10 #1

Er der ingen der ved noget eller er spørgsmålet bare blevet glemt ?

SELECT BannerID, Banner, URL, ((BannerID*0)+rand()) AS RandomID
FROM $db_table
WHERE (((UserID=\'$ID\')AND(Size=\'$Size\'))AND((CountDisplay < MaxDisplay)OR(MaxDisplay = -1)))
ORDER BY RandomID LIMIT 0, 1
Avatar billede emulatorspil.dk Nybegynder
08. november 2000 - 18:00 #2
det samme siger jeg til

http://www.eksperten.dk/spm/32244

------->>

jeg bruger
select *,((id*0)+rand()) as random from Banners order by random limit 1

M.v.h Emu
Avatar billede erikjacobsen Ekspert
08. november 2000 - 22:03 #3
Lj: Du skal nok lade antallet indgå i betingelsen. Noget i retning af
  SELECT ... rand()*CountDisplay AS RandomID FROM ... ORDER BY RandomID ASC LIMIT 0, 1
Få visninger giver ganget med et tilfældig tal typisk et mindre resultat end mange visninger
ganget med at andet tilfældigt tal (mon min gamle lærer i statistik læser dette, hehe)
Hvis du vil udjævne det lidt, men stadig med fordel til de få visninger, så læg et
eller andet passende tal til (som skal afpasses de aktuelle antal du nu engang har)
  SELECT ... rand()*(CountDisplay+1) AS RandomID FROM ... ORDER BY RandomID ASC LIMIT 0, 1
Avatar billede erikjacobsen Ekspert
08. november 2000 - 22:05 #4
Ups, jeg vil nok sige at det rand()*(CountDisplay+1) nok skal være mindst
rand()*(CountDisplay+1000)  hvis du f.eks. har et antal visninger, der er på
nogle tusind eller flere
Avatar billede limemedia Nybegynder
09. november 2000 - 00:03 #5
en pilz til guruen :D takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester