Cytat
IMO, przekombinowaliści.
IMO niedoceniles problemu ;]
Cytat
$objDB->query( 'SELECT * FROM items WHERE percentage >= ' . rand( 1, 100 ) . 'ORDER BY RAND() LIMIT 1' );
// i już mamy przedmiot

Tylko, ze losowany niezgodnie z zasadami podanymi na poczatku.
Po wylosowaniu jakiegos progu procentowego zostaja nam tylko rekordy z wiekszym prawdopodobienstwem wystapienia niz wylosowane.. i do tego momentu jest dobrze (no prawie..), bo sposrod tych elementow losujesz kolejny niestety juz na rownych prawach, czyli jesli wylosuje sie prog dajmy na to 30% to zarownio element majacy 31% jak i element majacy prawdopodobienstwo wystapienia rowne 50% beda mialy rowne szanse przy losowaniu a tak nie mialo byc.
Robilem cos podobnego niedawno w pracy (losowanie wazone), zrobilem do tego procedure, ale mysql takich mozliwosci jeszcze w wersji produkcyjnej nie daje, wiec trzeba sobie radzic inaczej

. Algorytm polega na tym, ze do jakiejs tymczasowej tablicy (czy to w bazie czy php) wpisujemy kazdy element tyle razy ile wynosi jego waga, czyli np. dla wartosci 20%, 25% i 50% wpisujemy kolejne elementy w ilosciach 20, 25 i 50 (w tym przypadku akurat mozna te wagi skrocic, bo maja NWD > 1), a nastepnie losujemy z tej tablicy/tabeli w sposob tradycyjny. Teraz elementy maja takie szanse jak miec powinny