Percentage als getallen
Ik wil afbeeldingen weergeven op een soort van 'random' manier maar niet helemaal random. Ik zou namelijk graag willen dat de veel bezochte afbeeldingen vaker worden weergegeven dan de niet bezochte afbeeldingen.
Daarom wil ik gebruik maken van percentages. Dit is automatisch te berekenen. Zo krijg ik bijv. automatisch de gegevens:
Afbeelding 1 = 10%
Afbeelding 2 = 30%
Afbeelding 3 = 40%
Afbeelding 4 = 20%
Nu wil ik dus die percentages gebruiken bij het random weergeven.
Dat kan ik dus doen door rand(1,100);
Dan pak ik dus afbeeldingen uit de DB met een bepaald getal.
Maar hoe kan ik ervoor zorgen dat ik krijg:
Afbeelding 1 = 1 - 10
Afbeelding 2 = 11 - 40
Afbeelding 3 = 41 - 80
Afbeelding 4 = 81 - 100
Het veranderd om de week dus ik zoek een manier zodat ik automatisch een script de percentages kan laten omzetten naar die getallen.
Stel random nummer is 32 dan pakt hij dus afbeelding 2. Dat is de bedoeling.
Ik heb nagedacht hoe ik automatisch kan uitvoerne maar heb geen flauw idee. Het aantal afbeeldingen kan namelijk ook per keer verschillen.
Het staat wel vast dat ik ALTIJD de percentages weet. Maar hoe zet ik dit om naar het laagste getal (zoals bij afbeelding 3 [41]) en het hoogste getal (zoals bij afbeelding 3 [80]) ??
Ik hoop dat duidelijk is wat de bedoeling is.
Graag alle tips/hulp, ik kan het wel gebruiken ;)
Mvg Rutje1
(p.s. ik weet dus hoe ik het uit DB kan halen, alleen NIET hoe ik de getallen omzet, ffe voor de duidelijkheid :P )
Gewijzigd op 01/01/1970 01:00:00 door Rutje1
Quote:
Nee, ik kan er geen touw aan vast knopen.Ik hoop dat duidelijk is wat de bedoeling is.
1) maak een array aan
2) zet elke afbeelding er net zo vaak in als zijn percentage. Een afbeelding met 10% komt er dus 10 keer in
3) gebruik shuffle om je array een random volgorde te geven
4) pak nu $array[0] als afbeelding
Omdat afbeeldingen met een hoger percentage vaker in de array zitten wordt de kans groter dat ze gekozen worden.
dus:
afb1: 10
afb2: 20
afb3: 50
afb4: 90
afb5: 100
De volgende query zou het moeten doen:
$sql = "SELECT * FROM afbeeldingen WHERE rate >= ".rand(0,100)." ORDER BY rate ASC LIMIT 1";
Jan Koehoorn > De manier van arrays lijkt me erg uitgebreid, ik verwacht namelijk een heel groot aantal afbeeldingen. Dan zou de array dus nog langer dan honderd worden.
pgFrank > ik weet niet echt hoe ik het beter uit kan leggen eigenlijk :(
Gewijzigd op 01/01/1970 01:00:00 door rutje1
Je kunt ook een extra veld toevoegen aan je tabel, genaamd views, bij elke opening laat je de counter +1 doen. Dan kun je het percentage uitrekenen. Dit moet je niet bij elk request doen, dat is te intensief, maar 1x per uur of per dag moet te doen zijn.
$sqlTotalViews = "SELECT SUM(views) AS totalviews FROM table GROUP BY id>0";
Je percentage is nu niet meer dan imageview/totalview*100
Het percentage is bekend! Maar het lukt me niet om daaruit getallen te halen zoals je dat in je 1e reactie zet.
Ik weet dit:
Afbeelding 1 = 10%
Afbeelding 2 = 30%
Afbeelding 3 = 40%
Afbeelding 4 = 20%
De bedoeling is dat het automatisch gebeurd. Dus op een bepaald moment ziet het script de percentages. Hieruit moet hij dus getallen maken... Maar hoe doe je dat??
Dat is dus het probleem om die getallen eruit te krijgen, en ik heb geen idee hoe ik dat maak
De manier zoals storeman ook bedoelde leek mij idd erg goed, maar ik zie daar neit bij hoe ik het moet doen. Anders krijg ik erg veel arrays.
Bump ^