如何在主键上使用caluse?

时间:2017-11-10 15:01:36

标签: mysql

我正在开发一个测验网站。在我的数据库中,我需要一个表格显示 报告测验错误。它应该是这样的:

______________________________________________________________________
|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子句。我可以解决这个问题吗?

1 个答案:

答案 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_numberwho_reported_this_error列上放置UNIQUE约束以防止重复。

如果您以后需要在同一记录中查看为测验5报告错误的所有人,请使用MySql的group_concat()函数即时构建该信息。只是不要以那种方式存储数据。

key列与此问题无关。您当然可以在WHERE子句中使用主键。在这种情况下,它只是不会帮助您,因为该数据与手头的问题无关。