Результат псевдокода (rand(1, num) % rand(1, num))
будет больше к 0 и меньше к num. Вычтите результат из числа, чтобы получить противоположное.
Так что, если мой язык приложения PHP, он должен выглядеть примерно так:
$arr = mysql_fetch_array(mysql_query(
'SELECT MAX(`Multiplier`) AS `max_mul` FROM tbl'
));
$MaxMul = $arr['max_mul']; // Holds the maximum value of the Multiplier column
$mul = $MaxMul - ( rand(1, $MaxMul) % rand(1, $MaxMul) );
mysql_query("SELECT * FROM tbl WHERE Multiplier=$mul ORDER BY RAND() LIMIT 1");
Объяснение кода выше:
- Получить наибольшее значение в столбце множителя
- вычислить случайное значение множителя (взвешенное по отношению к максимальному значению в столбце множителя)
- Выбрать случайную строку, которая имеет значение этого Множителя
Этого также можно достичь, просто используя MySQL.
Доказательство того, что псевдокод (rand(1, num) % rand(1, num))
будет иметь значение 0:
Выполните следующий код PHP, чтобы понять, почему (в данном примере 16 - это наибольшее число):
$v = array();
for($i=1; $i<=16; ++$i)
for($k=1; $k<=16; ++$k)
isset($v[$i % $k]) ? ++$v[$i % $k] : ($v[$i % $k] = 1);
foreach($v as $num => $times)
echo '<div style="margin-left:', $times ,'px">
times: ',$times,' @ num = ', $num ,'</div>';