我正在开发一个测验网站。在我的数据库中,我需要一个显示的表
报告测验错误。它应该看起来像这样:
______________________________________________________________________
|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 子句。我该如何解决这个问题?
问题出在表架构上。 从不将逗号分隔的数据存储在单个列中。您应该将表结构化为更像这样:
____________________________________________
|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 子句中使用您的主键。在这种情况下它不会帮助您,因为该数据与手头的问题无关。