butto là un'idea, visto l'orario possibilissimo che sia una cazzata, ma tant'è.
Il concetto chiave è quello di simulare virtualmente la numerosità che tu invece facevi nella realtà.
Supponiamo che tu abbia nella tua tabella 3 record (con ID 1, 2, 3) con peso = 8 e 2 con un peso = 5 (ID 4 e 5). Al crescere del peso cresce la possibilità di sorteggio.
Su una tabella terrai traccia di questa numerosità in base al peso.
Nel momento dell'estrazione, leggerai i dati di questa tabella, facendo la sommatoria pesata.
Quindi:
3*8 = 24.
2*5 = 10.
Totale = 34.
Estrai (con il rand() del PHP) un numero tra 1 e 34. Quel numero sarà in un certo senso il "puntatore" al record che ti interessa.
Se il numero è tra 1 e 8, dovrai estrarre il primo record che ha peso = 8. Se è tra 9 e 16 il secondo, se tra 17 e 24 il terzo. Se è tra 25 e 29 estrai il primo che ha peso = 5, se tra 31 e 34 estrai il secondo.
E così via.
Il tutto può essere astratto con delle formule matematiche, senza bisogno di fare if() in cascata come ti ho scritto io ora per farti capire.