请教一条SQL语句怎么写:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

请教一条SQL语句怎么写:报错

kun坤 2020-06-09 12:05:58 71

广告展示,一个公司有多条广告,一个页面有多个广告位,要求:一个公司在该页面只能出现一条广告,且每次刷新随机展示该公司一条 (mysql数据库)

     问题:页面轮换展示所有公司的广告,查询可用group by company_id,这样做,展示一个公司的广告就没有随机性,求教SQL怎么写?

 

表结构

id

company_id

ad_id

location(广告要展示的页面)

 ...

SQL 关系型数据库 MySQL 数据库
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-09 12:06:07

    首先用 group by rand() ,然后再group by company_id。
    select * from (select * from table group by rand()) as a group by a.company_id
    当然,使用rand()会有效率问题 ###### 我假定你的 ad_id 是从0到n:

    select
     *
    from
     ad
    group by
     company_id
    having
     ad_id = second(now()) % count(*);
    ######回复 @jxqlove? : 看他需求了~如果只是要咋看起来随机的样子而已######假如总共有8条广告,使用second(now()) % count(*),会导致不随机。这样写效率也不高######如果不是严格随机的话用timestamp 转换成 数字 和 ad_id 做过滤 这样如果 手动刷新的时候 就能体现出随机的概率了###### select a.company_id        ,substring_index(group_concat(a.location order by rand())                              ,',',1) as 'location' from table as a  group by a.company_id ######获取count然后随机就可以
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程