本帖最后由 dream1206 于 2012-12-01 12:31:49 编辑

解决方案 »

  1.   

    SELECT * FROM `t` WHERE `cid` IN (1,2,3) 
    union all
    select * from t where cid in (3)
    order by rand()
    limit 1这样3的概率就是原来的一倍多
      

  2.   

    select * from (
    SELECT * FROM `t` WHERE `cid` IN (1,2,3) 
    group by `cid`
    ) v
    ORDER BY rand() LIMIT 1
      

  3.   

    如果要强调随机性,似乎只能从三个随机行中再随机一次,才能得到如楼主所说的比较均匀的随机行。如果只是group by,再rand,取到的随机行里头,值为1的那些行,取到的应该是固定的行。而不是值为1的所有行中的随机行。可以尝试下述方法:
    mysql> select * from ((select * from t1 where id=1 order by rand() limit 1) union (select * from t1
    where id=2 order by rand() limit 1) union (select * from t1 where id=3 order by rand() limit 1)) b order by rand() limit 1;