我有以下表格:SQL從n個組獲得均勻分佈 - 獲取隨機物品
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地圖標籤產品。系統中標籤的分佈是不正常的,即一些標籤比其他標籤有更多的產品。
我想寫一個SQL,將獲取25個隨機產品:每個標籤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;
如何讓每個標籤返回隨機的產品?
任何幫助將不勝感激!謝謝。
謝謝!那就是訣竅。我添加了一個INNER JOIN到content_item,這樣我就可以返回content_item.id字段(這就是我以後的)。完善! – 2013-04-25 15:56:07