У меня есть следующая таблица:
Potion { id, name, freq }
Я раздавал зелья пользователям «случайным образом». но я хочу иметь возможность контролировать частоту случайности, потому что некоторые зелья сильнее других. Какой лучший способ сделать это?
Я думаю о чем-то вроде этого:
id | name | freq
-------------------
1 | light | 5
2 | fire | 10
3 | water | 10
4 | earth | 10
5 | air | 5
свет и воздух более мощные, чем огонь, вода и земля, поэтому они имеют меньшие частоты.
sum = select sum(*) from potions;
x = random(1..sum)
table = select * from potions;
offset = 0
for each element in table
if offset + element[freq] > x
chosen = element[name]
end
offset += element[freq]
end
Я думаю, что приведенный выше код (ruby + sql) будет работать, но он не масштабируется, и я очень сомневаюсь, что это наиболее эффективный способ сделать это. Может ли кто-нибудь помочь мне сделать это?
Заранее спасибо,