2011-10-24 41 views
4

我有一張如此列出的問題表格。使用單個SQL查詢選擇多組行數

id |問題|回答|教學大綱|難度

我想創建一個SQL語句,當難度很容易時,可以隨機地爲每個不同的教學大綱選擇5個問題。

所以,如果有4個課程大綱,我會有20個問題。

我在想這樣的事情...

SELECT 
    * 
FROM 
    questions 
WHERE 
    difficulty='easy' 
AND 
    syllabus 
IN 
(
    SELECT DISTINCT 
     syllabus 
    FROM 
     questions 
    WHERE 
     difficulty='easy' 
) 
LIMIT 
(5* 
    (
    SELECT 
     COUNT(DISTINCT syllabus) 
    FROM 
     questions 
    WHERE 
     difficulty='easy' 
    ) 

但這並不從每個不同的教學大綱只有正確的數量從任何教學大綱問題的返回5。

+1

添加了[最大正每組]標籤。在右側的** Related **標題下查看類似的問題。 –

+0

將會是一個更好的數據模型,如果你有一個單獨的表格,其中包含教學大綱 –

+0

你有任何問題/教學大綱的id和教學大綱id列? – r0ast3d

回答

1

這會工作,但會很慢:

SELECT * FROM questions WHERE difficulty='easy' ORDER BY RAND() LIMIT 5; 

更好的方法是先選擇5的ID,然後檢索對應這些ID的行。選擇ID本身可以使用WHERE ID> RAND(0,MAX(ID))來完成,但是如果存在間隙,那麼您的數據將會傾斜。

更好的選擇是在這裏討論,但需要更多的努力:Simple Random Samples from a Sql database