我正在开发一个测验网站。在我的数据库中,我需要一个表格显示 报告测验错误。它应该是这样的:
______________________________________________________________________ |key| quiz_number | who_reported_this_error | reported_number | ----------------------------------------------------------------------- | 1 | 5 | goid482,saiai10,hahakaka | 3 | ----------------------------------------------------------------------- | 2 | 3 | fiiai55,kihogi84 | 1 | -----------------------------------------------------------------------
如果名为hanabi的用户报告了有关测验编号5的错误,
首先,我需要检查who_reported_this_error
列,因为
我不希望用户两次报告相同的错误。如果“who_reported_this_error”列中不存在用户“hanabi”,我应该更新第1行。
现在我的问题。我想找到一个我应该用键列更新的行,并且键列的编号应该自动增加。但我知道我不能在这个主键上使用WHERE子句。我可以解决这个问题吗?
答案 0 :(得分:3)
问题在于表架构。 从不将逗号分隔的数据存储在一列中。您应该将表结构看起来更像这样:
____________________________________________ |key| quiz_number | who_reported_this_error | ──────────────────────────────────────────── | 1 | 5 | goid482 | --------------------------------------------- | 2 | 3 | fiiai55 | --------------------------------------------- | 3 | 5 | saiai10 | --------------------------------------------- | 4 | 5 | hahakaka | --------------------------------------------- | 5 | 3 | kihogi84 | --------------------------------------------
您可能还需要此表上的时间戳列。然后,在quiz_number
和who_reported_this_error
列上放置UNIQUE约束以防止重复。
如果您以后需要在同一记录中查看为测验5报告错误的所有人,请使用MySql的group_concat()
函数即时构建该信息。只是不要以那种方式存储数据。
key
列与此问题无关。您当然可以在WHERE子句中使用主键。在这种情况下,它只是不会帮助您,因为该数据与手头的问题无关。