SQL实战: 如何高效获取随机id

  1. 从一个拥有自增id(id>0)的表T里,随机取一条数据?

方案: 传入一个随机数r,用此随机数对最大的id进行取余

select * from T where id >= (select r%max(id) from T) limit 1;
  1. 从一个拥有自增id(id>0)的表T里,在指定范围CONDITION内随机取一条数据?

方案: 传入一个随机数r, 生成指定范围内【即id区间】的一个随机数即可

select * from T where CONDITION and id >= (select min(id) + IFNULL(r%(max(id) -min(id)), 0) from T where CONDITION) limit 1

注: 当max(id)和min(id)相同时,r%(max(id)-min(id)结果为NULL

你可能感兴趣的:(SQL实战: 如何高效获取随机id)