我有两张 table 。
quiz table
=================
id, q_name, code
completed_quizes table
======================================================
id, completion_date, user_id, quiz_code, quiz_count
我有两种类型的测验
Table_name: quiz_names
id q_name code
1 grand_quiz gra
2 normal_quiz nor
Table_name: completed_quizes
id completion_date user_id q_code q_count
1 1340841600 (28June2012) 2 gra 0
2 1340755200(27June2012) 2 nor 3
3 1340668800(26June2012) 2 nor 2
4 1340582400(25June2012) 2 nor 1
5 1340496000(24June2012) 2 gra 0
6 1340841600 (28June2012) 3 gra 0
7 1340755200(27June2012) 3 nor 3
8 1340668800(26June2012) 3 nor 2
9 1340582400(25June2012) 3 nor 1
10 1340496000(24June2012) 3 gra 0
规则:
1- 首先将对所有用户进行大测验。
2-基于大测验,如果任何用户上次测验是大测验,那么下一个建议将是普通测验1。
3-基于正常测验1,如果任何用户上次测验是正常测验1,那么下一个建议将是正常测验2。
4-基于普通测验2,如果任何用户上次测验是普通测验2,那么下一个建议将是普通测验3。
5-如果任何用户上一次测验是正常测验 3,那么下一个建议将再次是大测验。
附注
问题是每个用户的下一个建议都是基于他之前完成的测验。我想要所有用户谁将是下一个测验?
请问有什么建议吗?
最佳答案
您需要groupwise maximum要获取每个用户执行的最新测验,然后添加 1(使用 MOD
将最近参加测验 3 的用户旋转回 0)。要包含尚未参加任何测验的用户,您需要创建 outer join与您的用户表:
SELECT user_id, IFNULL((q_count+1) % 4, 0) AS next
FROM users LEFT JOIN (
completed_quizes NATURAL JOIN (
SELECT user_id, MAX(completion_date) AS completion_date
FROM completed_quizes
GROUP BY user_id
) AS t
) USING (user_id)
查看 sqlfiddle .
关于mysql - SQL 查询建议每个用户的下一个测验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241590/