我需要为网页生成不同的广告,而无需重复。
假设我有 6 个广告区域和 100 个广告。我需要用banner.id
and生成 6 行zone.id
,每次都是唯一的。
表格:
横幅广告
(id, ad_location)
区域
(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
在某些情况下,这不起作用。但是假设你有足够的区域和横幅,那么它应该返回六个在横幅和区域上都是不同的。