我想按如下方式实施计数系统
test_id email_id attemptCount status score subject
1 a@a1.com 1 Fail 5 C
1 a@a1.com 1 Pass 72 maths
1 b@a1.com 1 Pass 62 C
看看,(test_id,email_id, attempt_count, subject)
形成了独特的行。
我想为每次测试尝试插入一行。因此,对于same user, same test id, same subject
,tryCount必须加1。
我该怎么办?
1)我可以从另一个表中获取密钥(测试ID,电子邮件ID,主题)的最后一次尝试计数
test_id email_id subject last_attempt
2)我可以使用触发器自动增加尝试次数。 [我只是在SO帖子中读到这种方式]
3)我必须改变我的表格结构。所以我将为每个主题分别制作表格。因此主键组成为test_id, email_id, attempt_count
还有其他方法可以达到这个目的吗?哪一个是最好的方法?
我觉得我必须重新考虑我的桌面结构。
修改
在单个单元格中有多个值,这是一个好习惯吗?
test_id email_id overallStatus overallScore subject
1 a@a1.com [pass,fail,fail,pass] [10,2,3,10] maths
然后组合(test_id, email_id, subject)
只有一行。在这种情况下我不关心attemptCount。
我的目标是我想存储所有用户的所有测试的所有尝试结果。
答案 0 :(得分:2)
我个人会使用3张桌子。
test,subject和test_result
我有这样的测试
test_id
email_id
//other columns such as date, description, etc
表主题
subject_id (auto_increment)
test_id
attempts
//you can add date and the latest status or score
如果你想要一份报告,这就像一张历史表:
test_result
test_result_id(auto increment)
test_id
subject
status
score
因此,当您在test_result上进行插入时,可以使用+1尝试(来自表主题)更新主题,并且如果要更新该表上的最新结果(以避免在此表上进行查询,可能很长,你也可以这样做)
答案 1 :(得分:0)
您的方法/函数必须以某种编程方法创建,您无法实现所有这些只将数据传递到数据库。
您在test_id上使用auto_increment是正确的,但是您的主键是test_id。
这没有错。