【问题标题】:MySQL query - get latest score per user and categoryMySQL 查询 - 获取每个用户和类别的最新分数
【发布时间】:2017-05-14 17:04:18
【问题描述】:

所以这是我的数据库结构的图像:

基本上它是一个测验应用程序,其中每个问题和测验都有一个类别(因为还有混合的测验类别 - 包括来自多个类别的问题)。每次用户进行新测验时,都会在测验表中创建一个新条目——记录用户、类别、分数以及测验的开始和结束时间。

我需要一个查询来显示每个用户和类别的最新分数。 (很高兴:也是每个用户和类别的平均分数)

最后应该看起来像。显然我已经有一个查询,但它并不能很好地工作,因为 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"

你能帮我找出错误吗?我真的迷路了。 谢谢!

【问题讨论】:

标签: php mysql sql


【解决方案1】:

您需要在第二个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"

【讨论】:

  • 你知道是否还可以显示每个用户和类别的测验次数以及平均分数和最高分数吗? - 我有一个查询,但它显示了奇怪的结果。
  • 您需要加入使用GROUP BY 的子查询才能获得这些结果。
【解决方案2】:
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

我没试过..

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2021-10-22
    • 2013-05-18
    • 1970-01-01
    • 2020-08-31
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多