我有以下表格:
TABLE product
id int(11)
title varchar(400)
TABLE tag
id int(11)
text varchar(100)
TABLE product_tag_map
product_id int(11)
tag_id int(11)
PRODUCT_TAG_MAP 将标签映射到产品。系统中标签的分布不正常,即有些标签的产品比其他标签多得多。
我正在尝试编写一个将获取 25 个随机产品的 SQL:每个标签 5 个产品,用于 5 个标签(所以这是 5x5 = 25)。
在这里找到了答案:How can I get an even distribution using WHERE id IN(1,2,3,4)
但这不会产生随机产品——它总是为每个标签获取相同的产品。
这是我的SQL:
SET @last_tag = 0;
SET @count_tag = 0;
SELECT DISTINCT id FROM (
SELECT
product.*,
@count_tag := IF(@last_tag = product_tag_map.tag_id, @count_tag, 0) + 1 AS tag_row_number,
@last_tag := product_tag_map.tag_id
FROM product
LEFT JOIN product_tag_map ON (product_tag_map.product_id=product.id)
WHERE
product_tag_map.tag_id IN (245,255,259,281,296)
) AS subquery WHERE tag_row_number <= 5;
如何使它返回每个标签的随机产品?
任何帮助将非常感激!谢谢。