如何根据其类型获得两个随机的唯一广告



在MySQL中,我有一个名为adverties的表,它包含不同类型的广告,如banner和square。

我想要两个不同广告类型的随机广告。

SELECT DISTINCT id, ad_type
FROM tbl_advertisement
WHERE ad_type IN ('banner', 'square')
ORDER BY RAND()
LIMIT 2

它有时给了我独特的ad_type,但有时并不像预期的那样。

[
RowDataPacket { id: 9, ad_type: 'square' },
RowDataPacket { id: 8, ad_type: 'square' }
]

预期输出具有唯一ad_type:的任意两个随机广告

[
RowDataPacket { id: 3, ad_type: 'square' },
RowDataPacket { id: 4, ad_type: 'banner' }
]

一个选项使用窗口函数,在MySQL 8.0中可用:

select id, ad_type
from (
select ad.*, row_number() over(partition by ad_type order by rand()) rn
from tbl_advertisement ad
where ad_type in ('banner','square') 
) t
where rn = 1

在早期版本中,最简单的选项可能是union all:

(select id, ad_type from tbl_advertisement where ad_type = 'banner' order by rand() limit 1)
union all
(select id, ad_type from tbl_advertisement where ad_type = 'square' order by rand() limit 1)

最新更新