2015-10-04 56 views
-1

我有一排產品,我想得到10個隨機記錄,但每個user_id最多隻有1行。現在我有這個:我怎麼能從mySQL獲得DISTINCT,但只有1場?

SELECT user_id, product_id, price, name, category, is_featured 
FROM db_products 
WHERE category!=15 AND active=1 AND deleted=0 AND is_featured=1 
ORDER BY RAND() DESC LIMIT 0,12 

我試着做一個SELECT DISTINCT user_id, ...,但那是行不通的。該表有100個產品,每個user_id可能有多個,但我想每個user_id最多檢索1個,但總共仍有10個。

這是否可能沒有更復雜的結構?

+0

的可能的複製[分組依據值RAND()](http://stackoverflow.com/questions/12725363/group按價值蘭特) –

回答

3

我可能會錯過一些東西,但你有沒有嘗試做一個GROUP BY?

SELECT user_id, product_id, price, name, category, is_featured 
FROM db_products 
WHERE category!=15 AND active=1 AND deleted=0 AND is_featured=1 
GROUP BY user_id -- SPECIFY FIELD HERE 
ORDER BY RAND() DESC 
LIMIT 0,12 

這將爲每個用戶分組一行,或者您希望分組的一個字段。

+0

這工作,非常感謝你!將接受你的答案作爲第一個在5分鐘:) – user1227914

+1

這不是真正的隨機解決方案。你首先進行分組,然後對訂單進行隨機化,也就是說,你將用戶的順序隨機化,而對於他們來說不是數值,而只將數據庫順序中的第一個數值分組。嘗試執行它幾次,你會看到。這裏是SQL小提琴中的例子:http://sqlfiddle.com/#!9/2b24b/3 –

2

嘗試類似的東西與分組在主查詢隨機排序後的子查詢:

SELECT * FROM 
(SELECT user_id, product_id, price, name, category, is_featured 
FROM db_products 
WHERE category!=15 AND active=1 AND deleted=0 AND is_featured=1 
ORDER BY RAND()) AS subquery 
GROUP BY user_id 
LIMIT 0,10 
+0

是的,這似乎是。非常感謝 :) – user1227914

相關問題