如何根据其类型获取两个随机唯一广告?
How to get the two random unique advertisement based on its type?
在 MySQL 中,我有一个 table 广告,其中包含不同类型的广告,例如横幅广告和方形广告。
我想要两个不同广告类型的随机广告。
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' }
]
一个选项使用 window 函数,在 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)
在 MySQL 中,我有一个 table 广告,其中包含不同类型的广告,例如横幅广告和方形广告。
我想要两个不同广告类型的随机广告。
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' }
]
一个选项使用 window 函数,在 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)