获取最新的行并将其与另一个表链接?

时间:2018-03-11 12:41:45

标签: mysql sql

我试图获取表格的最新一行

return "/bar/hello"

我使用了查询:

user_quiz:
+--------+-----------+-------------+-------------------+------------+
|quiz_id |userid     | module_id   |number_of_questions| user_score |     
+--------+-----------+-------------+-------------------+-------- ---+
|    1   |  1        |      1      |        5          |     5      |
|    2   |  2        |      2      |        10         |     9      |
|    3   |  1        |      1      |        10         |     9      |
+--------+-----------+-------------+-------------------+------------+

正确检索最后一行。 但是我想将module_id与另一个表链接:

SELECT * FROM user_quiz WHERE userid = 1 ORDER BY quiz_id DESC LIMIT 1

并检索模块名称。

查询结果将用于打印用户最近的测验:

    module:
    +---------+------------+
    |module_id|module_name |    
    +---------+------------+
    |    1    |  Forces    | 
    |    2    | Electricity|   
    +---------+------------+

这只能使用一个查询吗?

2 个答案:

答案 0 :(得分:1)

您只需要一个JOIN

SELECT uq.*, m.module_name
FROM user_quiz uq JOIN
     modules m
     ON uq.module_id = m.module_id
WHERE uq.userid = 1
ORDER BY uq.quiz_id DESC
LIMIT 1;

答案 1 :(得分:1)

实现相同的更简单的查询将是

SELECT 
     user_quiz.quiz_id, 
     user_quiz.number_of_questions, 
     user_quiz.user_score, 
     modules .module_name
FROM user_quiz JOIN modules
     ON user_quiz.module_id = modules.module_id
WHERE user_quiz.userid = 1
ORDER BY user_quiz.quiz_id DESC
LIMIT 1

如果您想为所有用户获得相同的结果,您可以使用更复杂的查询

SELECT
    user_quiz_virtual_table.userid,
    user_quiz_virtual_table.quiz_id, 
    user_quiz_virtual_table.number_of_questions, 
    user_quiz_virtual_table.user_score, 
    modules.module_name
FROM (
    SELECT 
      user_quiz.userid
      user_quiz.quiz_id, 
      user_quiz.module_id
      user_quiz.number_of_questions, 
      user_quiz.user_score
    FROM user_quiz
    ORDER BY user_quiz.quiz_id DESC
    GROUP BY userid
) AS user_quiz_virtual_table
JOIN modules ON user_quiz_virtual_table.module_id = modules.module_id