SELECT IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour FROM (SELECT @rnd:=rand()) AS rndinit;
Gives you a scent with the requested probabilities.
SELECT * FROM tablename ORDER BY rand() LIMIT 1
gives you one random string. Now we will split it:
SELECT tablename.* FROM tablename INNER JOIN ( SELECT IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour FROM (SELECT @rnd:=rand()) AS rndinit ) AS rndview ON rndview.rndflavour=tablename.flavour ORDER BY rand() LIMIT 1
source share