Hola Jota, no se entiende muy bien la pregunta pero me atrevo a proponerte una solución. Supongo que quieres generar números o porcentajes aleatorios pero respetando el valor de la db. Cambio de ejemplo.
Tenemos unos servidores y queremos balancear la carga aleatoriamente pero manteniendo cierto porcentaje. De esta manera, tenemos server1 15%, server2 50%, server3 20%, server4 15%. Queremos que la carga se distribuya aleatoriamente, pero que cada server reciba este porcentaje de carga sobre un total de 100 peticiones. Una solución sería:
Código PHP:
Ver original<?php
#1. Un array con los porcentajes que quiero que reciba cada server donde server => porcentaje:
$balanceo = array(1 => 15, 2 => 50, 3 => 20, 4 => 15);
#2. Genero una ristra de 100 elementos que representan los porcentajes anteriores. Así, el 1 aparecerá 10 veces, el 2 50, etc...
foreach ($balanceo as $server => $porcentaje)
{
for ($i = 0; $i < $porcentaje; $i++) {
$ristra[] = $server;
}
}
# Ahora $ristra contiene 10 veces 1, 50 veces 2, etc...
#. Cada vez que haga falta resolver una petición, elijo una posición aleatoria del array, este valor indica el server a donde debo balancear:
$max = 100;
$min = 1;
$redirectTo = $ristra[rand($min, $max)];
//Así las posibilidades de caer en server uno son 10%, server 2 50%.
echo "<h3>Redireccionando a $redirectTo</h3>";
?>
Te dejo el ejemplo, seguro que cualquier forero puede mejorarlo u orientarte mejor.
Salu2!