2012-04-17 82 views
1

我正在嘗試編寫一個將返回問題及其相應答案的sql語句。在下面的例子中,我對subject_id進行了硬編碼,但它會動態設置。受組數據限制

我想限制結果只有5個問題,但如果我只是添加LIMIT 5它將整個數據限制爲只返回5,這不是我想要的。

SELECT q.id,q.question,a.question_id,a.answer, a.correct 
FROM questions q 
JOIN answers a ON q.id = a.question_id 
WHERE q.subject_id = 18 
GROUP BY q.id,a.id 

我也想達到別的東西,但我不知道是否會更好地實現它的商業邏輯(PHP)。我想爲每個問題(acorrect = 1)加上一個隨機的3個不正確的答案(correct = 0)返回正確的答案。

回答

2

對於第一個問題:您需要分別在子查詢中將LIMIT應用於問題表。

SELECT q.id,q.question,a.question_id,a.answer, a.correct 
    FROM (SELECT * FROM questions q WHERE q.subject_id = 18 
      ORDER BY RAND() LIMIT 5) q 
    JOIN answers a on q.id = a.question_id 
GROUP BY q.id, a.id 
+0

感謝您的快速響應。該解決方案工作正常,除了它總是返回相同的5個問題(前5個)。我需要每次都返回隨機的。從閱讀RAND函數來看,這將是一個相當緩慢的解決方案,因爲數據庫將有超過10K個問題。是否有更有效的解決方案可以限制問題並每次返回隨機問題? – SteveF 2012-04-17 01:07:31

+0

也許這個程序化的解決方案會更好。你怎麼看? http://www.electrictoolbox.com/msyql-alternative-order-by-rand/ – SteveF 2012-04-17 01:12:14

+0

10k不是很多行(尤其是因爲您將首先通過'subject_id'進行過濾)。你可能想嘗試一下,看看它真的有多慢。如果你想真正快速的隨機化,你可以用這樣的解決方案生成隨機ID的客戶端:http://www.dasprids.de/blog/2008/06/07/fetching-random-rows-of-mysql-有效率的。也請看看這裏:http://stackoverflow.com/questions/2707717/how-do-i-select-a-random-record-efficiently-in-mysql – mellamokb 2012-04-17 01:12:56