我需要为一个网页生成不同的广告,而不是重复。
假设我有6个广告区域,100个广告。我需要生成6行banner.id
和zone.id
,每次都是唯一的。
表:
-
banner_ads
(id, ad_location)
-
zones
(id, zone_code)
-
banner_to_zones
(banner_id, zone_id)
如果需要,它可以是PHP和SQL的组合
这是一个方法。对于每个banner_id
随机选择一个可能的区域(从数据中)。然后从随机选择的区域中,随机选择一个banner_id
。此时,你已经拥有了一系列不同的区域和横幅。你可以得到其中的六个:
select thezone as zone_id,
substring_index(group_concat(banner_id order by RAND()), ',', 1) as banner_id
from (select banner_id, substring_index(group_concat(zone_id order by RAND()), ',', 1) as thezone
from banner_to_zones b2z
group by banner_id
) b
order by rand()
limit 6
在某些情况下,这将不起作用。但是假设您有足够的区域和横幅,那么它应该返回6个在横幅和区域上不同的内容。