2013-06-21 77 views
0

我需要從特定的四個類別中選擇「四個不同的隨機記錄」,然後按升序排列。MYSQL SELECT DISTINCT RECORDS GROUPED

我想選擇16條隨機記錄,然後我已經CATEGORY_ID分組它們

查詢:


SELECT * FROM 
(
    SELECT 
     id, 
     category_id, 
     description, 
     RAND() AS rnd 
    FROM questions 
    ORDER BY rnd 
    LIMIT 16 
) AS temp 
GROUP BY temp.category_id 
LIMIT 4 
 

結果在某些時刻:


id  category_id  description  rnd 
-------------------------------------------------------------- 
224   1   Question 7  0.004305024635330797 
293   2   Question 10  0.006966075866451558 
601   3   Question 2  0.001877430828174046 
958   4   Question 54  0.0065207639769844375 
 

結果在其他時刻:


id  category_id  description  rnd 
-------------------------------------------------------------- 
230   1   Question 2  0.01622675640157122 
310   2   Question 21  0.005430353810480194 
159   4   Question 17  0.021778853630441106 
 

的問題是,並非總是顯示四類 我需要修復此查詢,到現在爲止,我不能找到真正的解決方案。
我需要你的幫助!
在此先感謝!

+0

當前數據和預期結果會好很多 – zod

+0

我的數據完全相同:S – joseluisq

回答

1

的關鍵是選擇的類別第一,然後再回到原來的數據:

select q.* 
from (select category_id, substring_index(group_concat(id order by rand()), ',', 1) as id 
     from questions 
     group by category_id 
     order by rand() 
     limit 4 
    ) c4 join 
    questions q 
    on q.id = c4.id 
order by category_id 

還有其他的方法可以做到這一點,例如,通過使用一堆union all聲明。但這是一般的,可以很容易地改變類別的數量。

+0

這就是我一直在尋找的東西! 在這裏我的SQL小提琴與您的解決方案[小提琴](http://sqlfiddle.com/#!2/b5c49/2/0) 非常感謝! – joseluisq

+0

我還有其他小問題:) 如何顯示更多記錄但保持相同的邏輯?例如,8個,16個和更多個 – joseluisq