SQL随机组合两个唯一的列


SQL combining 2 unique columns by random

我需要为一个网页生成不同的广告,而不是重复。

假设我有6个广告区域,100个广告。我需要生成6行banner.idzone.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个在横幅和区域上不同的内容。