次のテーブルがあります。
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;
タグごとにランダムな商品を返すにはどうすればよいですか?
どんな助けでも大歓迎です!ありがとう。