广告展示,一个公司有多条广告,一个页面有多个广告位,要求:一个公司在该页面只能出现一条广告,且每次刷新随机展示该公司一条 (mysql数据库)
问题:页面轮换展示所有公司的广告,查询可用group by company_id,这样做,展示一个公司的广告就没有随机性,求教SQL怎么写?
表结构
id
company_id
ad_id
location(广告要展示的页面)
...
首先用 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然后随机就可以
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。