[MySQL] Losowanie "warunkowe" rekordów

0

Cześć, mam następujący problem.

Mam w tabeli kolumnę, np: lCount.
W niej jest trzymana liczba.

Teraz chcę wylosować 9 rekordów z tej tabeli, ale w taki sposób, żeby rekordy, gdzie kolumna lCount ma większą wartość, miały większą szansę na wylosowanie.

Myślałem nad taką konstrukcją:

SELECT * FROM tabela ORDER BY rand(), lCount LIMIT 9

Ale rozwiązanie wydaje mi się złe, a ja nie mam w bazie tylu rekordów, żeby to zweryfikować.

Pomożecie? ;)

0

Tak jak zrobiłeś zwróci rekordy posortowane wg wylosowanej wartości. Jeżeli dla kilku rekordów zostanie wylosowana ta sama liczba to dopiero wtedy o kolejności będzie decydować wartość lCount.

Jeżeli chcesz mieć rzeczywiście większe prawdopodobieństwo wybrania liczb z wyższą wartością lCount to posortuj po odpowiednio dobranej średniej ważonej wartości wylosowanej i lCount.

0
AdamPL napisał(a)

Jeżeli chcesz mieć rzeczywiście większe prawdopodobieństwo wybrania liczb z wyższą wartością lCount to posortuj po odpowiednio dobranej średniej ważonej wartości wylosowanej i lCount.

A tak na ludzki język? :P
Tzn. jak to kodem wygląda, bo nie mogę sobie tego wyobrazić

[później]

Chyba wiem. Tzn. coś takiego może być?

SELECT * FROM `bands` order by (rand()*100*lCount+1) desc

wg moich testów wynika, że ok, ale te testy nie są jednoznaczne.</b>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.