mysql - zufallskriterium

pangu

Angesehenes Mitglied
möchte per zufall einen mysqldatensatz auswählen, allerdings unter zuhilfenahme eines bewertungskriteriums x.
datensätze die z.b. einen x wert von 10 haben, sollen dann mit höherer Wahrscheinlichkeit ausgewählt werden, als einer mit beispielwert 8.
-> ist sowas möglich?
 
thx
(kapier das aber ehrlich gesagt noch nicht ganz: weil hier im beispiel wird die gewichtung ja per zufall ausgewählt: demnäch würde ja ein banner der gewichtung 1 genausowarscheinlich=oft wie einer der gewichtung 3 aufgerufen werden, oder hab ich da einen denkfehler??)
 
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..
biggrin.gif
 
Zurück
Oben