2013-06-18 113 views
-1

我需要爲網頁生成不同的廣告,而不需要重複。SQL隨機組合2個唯一列

比方說,我有6個區域,廣告去,100廣告。我需要生成6行banner.idzone.id,這將是唯一的每一次。

的表:

  • banner_ads(id, ad_location)

  • (id, zone_code)

  • banner_to_zones(banner_id, zone_id)

如果需要

+0

你是什麼意思?「我需要用banner.id和zone.id生成6行,每次都是唯一的。」 ?你的意思是6行的組合必須是唯一的嗎?你的意思是這些行不應該顯示嗎?或者你的意思是6行不應該有重複的值。 –

回答

0

這可能是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 

有些情況下,這將無法正常工作。但假設你有足夠的區域和橫幅,那麼它應該返回六個橫幅和區域不同的橫幅。

+0

如果刷新屏幕,您可能會再次在相同區域中看到相同的廣告。 – karmafunk