mysql查询结果随机取一个_从SQL查询结果随机取一条数据

在MySQL中,为了从广告信息表中随机获取一条启动页广告,作者最初使用max(startPageId) * rand()的方式,但在数据不连续或筛选后范围较大时存在问题。为解决此问题,优化方案改为先计算符合条件的广告数量,然后乘以rand()并用floor()处理,再在结果集中通过子查询和limit 1获取随机记录。
摘要由CSDN通过智能技术生成

最近工作中会涉及复杂的SQL语句,还是挺有意思的。以前想写没有应用场景,现在正好可以多锻炼锻炼。我觉得在实际开发中,程序代码并不是最难的,最难的还是SQL。SQL逻辑性最强,而且还要很清楚表设计,业务场景。特别是复杂的业条场景下提炼数据,要考虑到功能,性能,是否会锁表。

需求:有一张表保存诺干条广告信息。当APP启动时,根据登录用户所在的区域,随机取出一条广告返回,作为启动页。

数据库:MySQL

刚开始,我的做法是:

select floor(max(startPageId) * rand()) from ghome.ghome_startpage_info where 1=1 and status!='00';

startPageId是自动增长的Integer型

其他where条件不贴出来了。这句意思是,查询符合条件的数据,根据 max 函数找出结果最大的,乘以 rand 函数随机生成的一个小于1的数,再用 floor 去掉小数位。得出一个 randId。

再执行

select startPageId,startPageName,validStartTime,validEndTime,pageImageUrl,pageLinkUrl,allowBreak,waitTime

from ghome.ghome_startpage_info where 1=1 and status!='00' and startPageId >= randId limit 1;

根据查询条件,startPageId大于等于刚刚得出来的随机id。

这个语句没

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值