2017-05-14 75 views
0

所以這是我的數據庫結構的圖像: databaseMySQL查詢 - 讓每個用戶和類別最新得分

基本上它是一個測驗應用程序,其中的每一個問題和測驗有一個類別(因爲還有競猜類混合 - 其中包括幾個類別的問題)。每當用戶玩一個新的測驗時,測驗表中的新條目將被製作 - 記錄測驗的用戶,類別,分數以及開始和結束時間。

我需要一個查詢,其中我顯示每個用戶和類別的最新分數。 (很高興有:也是每個用戶和類別的平均分數)

最終應該看起來像this。很顯然,我已經有了一個查詢,但它並不是很好,因爲Max Mustermann只顯示了一個結果,但實際上有4個類別的結果。我不太清楚爲什麼所有其他用戶都會顯示他們所玩的結果,也許這是因爲他們每個類別只玩一個測驗。但Max Mustermann僅播放了一次「混合」類別,並未顯示。

這是我目前使用的代碼:

$query_scores_per_cat_per_user = " 
     SELECT category, t1.scores AS scores 
     FROM categories 
     left JOIN quizzes as t1 ON categories.id=t1.FK_categories 
     left JOIN quizzes AS t2 
      ON t1.FK_users = t2.FK_users 
       AND t1.end_timestamp < t2.end_timestamp 
     WHERE t2.FK_users IS NULL 
     and t1.fk_categories = ".$category_id." and t1.FK_users=".$all_users_id." 
     order by category ASC" 

能不能幫我找到錯誤了嗎?我真的迷失在這裏。 謝謝!

+0

見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Strawberry

回答

0

您需要在第二join的類別。

$query_scores_per_cat_per_user = " 
    SELECT category, t1.scores AS scores 
    FROM categories 
    left JOIN quizzes as t1 ON categories.id=t1.FK_categories 
    left JOIN quizzes AS t2 
     ON t1.FK_users = t2.FK_users 
     AND t1.FK_categories = t2.FK_categories 
     AND t1.end_timestamp < t2.end_timestamp 
    WHERE t2.FK_users IS NULL 
    and t1.fk_categories = ".$category_id." and t1.FK_users=".$all_users_id." 
    order by category ASC" 
+0

謝謝!這完全奏效! –

+0

您是否知道是否可以顯示每個用戶和類別的測驗次數以及平均分數和最高分數? - 我有一個查詢,但它顯示我奇怪的結果。 –

+0

您需要加入使用'GROUP BY'來獲得這些結果的子查詢。 – Barmar

-1
SELECT t2.UserName, category, Sum(t1.scores) AS scores, AVG(t1.scores) 
     FROM categories 
     left JOIN quizzes as t1 ON categories.id=t1.FK_categories 
     left JOIN quizzes AS t2 
      ON t1.FK_users = t2.FK_users 
       AND t1.end_timestamp < t2.end_timestamp 
     WHERE t2.FK_users IS NULL 
     and t1.fk_categories = ".$category_id." and t1.FK_users=".$all_users_id." 
Group by t2.UserName, Category, 
     order by t1.Scores desc, category 

我沒有嘗試..