开发者社区> 问答> 正文

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

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

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

 

表结构

id

company_id

ad_id

location(广告要展示的页面)

 ...

展开
收起
kun坤 2020-06-09 12:05:58 599 0
1 条回答
写回答
取消 提交回答
  • 首先用 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然后随机就可以
    2020-06-09 12:06:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载