我試圖從幾張表中獲取一些統計數據。我們有一個用戶表,測驗表,測驗問題集表和測驗問題表。每個測驗都有很多組,每組有一個或多個問題。還有一個問題表,這是問題的來源(測驗問題表將問題鏈接到問題集,然後鏈接到測驗,然後鏈接到用戶)。我需要的是看到正確回答的問題數量以及回答的問題數量,但僅限於過去的50個問題。所以如果一個用戶回答了120個問題,那麼只有最近的50個用在這個查詢中;如果用戶回答了37個問題,則應該使用他們的所有問題。我希望得到這個佈局,以便user_id,questions_answered,questions_answered_correctly。我目前有這個工作,但我正在瀏覽每個用戶,並抓住他們最近的50個問題,並附上一些限制組織參與的附加表格,我必須做數百次,如果不是數千次,才能得到一份統計報告。有限子查詢的MySQL查詢
我猜我需要做一個子查詢的地方只拉最近的問題從用戶,但我不知道這樣的子查詢如何工作。這是迄今爲止我所擁有的,但我確信我完全沒有這個。它執行,但不正確。有些結果是超過50級的時候,他們不應該:
SELECT users.id, (SELECT COUNT(grammar_quiz_questions.id) FROM `grammar_quiz_questions`
INNER JOIN `grammar_quiz_question_sets` ON `grammar_quiz_question_sets`.`id` = `grammar_quiz_questions`.`grammar_quiz_question_set_id`
INNER JOIN `grammar_quizzes` ON `grammar_quizzes`.`id` = `grammar_quiz_question_sets`.`grammar_quiz_id`
INNER JOIN `grammar_questions` ON `grammar_questions`.`id` = `grammar_quiz_questions`.`grammar_question_id`
WHERE (grammar_quiz_questions.finished is not null AND grammar_quizzes.user_id = users.id)
ORDER BY grammar_quiz_questions.finished DESC LIMIT 50) AS `questions_answered`, (SELECT COUNT(grammar_quiz_questions.id) FROM `grammar_quiz_questions`
INNER JOIN `grammar_quiz_question_sets` ON `grammar_quiz_question_sets`.`id` = `grammar_quiz_questions`.`grammar_quiz_question_set_id`
INNER JOIN `grammar_quizzes` ON `grammar_quizzes`.`id` = `grammar_quiz_question_sets`.`grammar_quiz_id`
INNER JOIN `grammar_questions` ON `grammar_questions`.`id` = `grammar_quiz_questions`.`grammar_question_id`
WHERE (grammar_quiz_questions.finished is not null AND grammar_quizzes.user_id = users.id AND grammar_quiz_question_sets.correct_on_first_attempt = 1)
ORDER BY grammar_quiz_questions.finished DESC LIMIT 50) AS `questions_answered_correctly`
FROM users
謝謝, 詹姆斯
我想過了,但統計表必須更復雜。我需要跟蹤何時減少questions_answered_correctly的價值,以及在問題得到解答後何時提出問題。此外,該查詢不起作用的值超過50,正在爲questions_answered和questions_answered_correctly表提供。此外,我在軌道上使用紅寶石。我意識到我可以使用ActiveRecord,但是我在這裏以原始查詢開始。 – 2012-03-20 15:03:16
根據統計表,實際上你必須跟蹤。但你已經這麼做了。想象不得不爲具有數百條記錄的狂熱用戶計算統計數據。您不希望僅因爲數據庫中有一個附加條目而導致您的大量查詢;所以想想stats表。它便宜很多。 – kasavbere 2012-03-20 16:36:44
您是否在grammar_quizzes中爲每個正確的問題獎勵用戶?或者因爲你沒有問題的重疊? – kasavbere 2012-03-20 18:47:56