mysql - 如何在主键上使用where子句?

标签 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 子句。我该如何解决这个问题?

最佳答案

问题出在表架构上。 从不将逗号分隔的数据存储在单个列中。您应该将表结构化为更像这样:

____________________________________________
|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 子句中使用您的主键。在这种情况下它不会帮助您,因为该数据与手头的问题无关。

关于mysql - 如何在主键上使用where子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47225648/

相关文章:

mysql - 通过过滤器搜索在datagridview中显示多个值

mysql - vb.net 删除非法字符 - 但不删除空格

mysql - 使用 SQL 基于当前行值对数据子集进行聚合函数

mysql - 需要帮助理解 MySQL PACK_KEYS

php - Symfony 2.3 实体 bool 属性只允许一行为真

mysql - 如何更改特定列的 CHARACTER_SET_NAME 和 COLLATION_NAME?

c++ - 为什么使用 PHP 数百个数据库连接无关紧要..但在 C++ 应用程序中却很重要?

mysql - 更新字段值失败

mysql2/ promise : INSERT statement not valid in transaction query

mysql - 试图了解 InnoDB 表上的 MySQL 死锁