2017-05-14 74 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 

我没有尝试..