hmm
also die Gewichtung dort ist 1-3
die SQL Abfrage lautet
SELECT * FROM banner WHERE gewicht <= '$zufall'
das heißt wenn zufall 1 können banner mit gewicht 1-3
wenn zufall 2 Banner mit gewicht 2-3
wenn zufall 3 dann nur banner mit gewicht 3
bei zufall 1 und zufall 2 wird aus den ermittelten Banner wieder eines per Zufall ausgewählt
wenn man jetzt annimt, das jede zahl 1-3 in etwa gleich oft ermittelt wird.
also bei 9 durchläufen kommt 3*1 3*2 und 3*3
dann haben wir bei der
3 mal Banner mit dem Gewicht 3 (wenn zufall3)
3 mal Banner mit dem Gewicht 2 oder 3 (wenn zufall 2)
und 3 mal Banner mit dem Gewicht 1,2 oder 3 (wenn zufall 1)
das bedeutet, ein banner mit dem Gewicht 1 kann 0 oder max. 3 mal erscheinen
ein Banner mit dem Gewicht 2 kann 0 oder 6 mal erscheinen
ein Banner mit dem Gewicht 3 erscheint mindestens 3 mal und kann bis zu 9 mal erscheinen
Wohl gemerkt aber nur, wenn man davon ausgeht das bei 3 Zahlen die warschelichkeit für eine Zahl bei 33,333.. % liegt
####
Eine Eine Art gewichtung ist das schon aber auch nich besonders genau...
wie wäre folgende Idee(ist mir gerade gekommen )
zwei Spalten für die Gewichtung.
Spalte 1 Name Grundwert, Spalte 2 Name Countdown
dann eine normale zufallsabfrage.
also
select * from TAB where Countdown >=1 order by rand() limit 1
also eine Zeile per Zufall laden wenn in Spalte Countdown eine Zahl >=1 steht.
anschließend mit einem Update den countdown dieser Zeile -1 nehmen.
Damit werden dann Einträge mit dem Gewicht 1 nur einmal aufgerufen, und Einträge mit dem Gewicht werden 8 mal aufgerufen
Du must dann nur ständig die Anzahl im auge behalten, und wenn alle Einträge auf 0 stehen, schreibst du mit einem Update den wert der Spalte Grundwert in die Spalte Countdown..