Php 如何将多个值存储到SQL行中?

Php 如何将多个值存储到SQL行中?,php,mysql,sql,Php,Mysql,Sql,我有一个名为users的表,其中一行需要保存用户执行的所有操作,这些操作被引用为action\u id 如何让行容纳多个操作\u id 例如,假设用户执行了5个操作,每个操作的ID为100001、100002、100003、100004、100005。如何将其存储到数据库中,以便以后可以说出用户所做的所有操作 该行可能需要存储数百或数千个6位数的值。我建议您使用用户ID和操作ID创建一个用户操作表。这样,您就可以引用所执行的操作,而不必在用户表的一行中存储多个值 您将为用户执行的每个操作存储行。

我有一个名为users的表,其中一行需要保存用户执行的所有操作,这些操作被引用为
action\u id

如何让行容纳多个
操作\u id

例如,假设用户执行了5个操作,每个操作的ID为100001、100002、100003、100004、100005。如何将其存储到数据库中,以便以后可以说出用户所做的所有操作


该行可能需要存储数百或数千个6位数的值。

我建议您使用
用户ID
操作ID
创建一个
用户操作
表。这样,您就可以引用所执行的操作,而不必在
用户
表的一行中存储多个值

您将为用户执行的每个操作存储行。该表可能如下所示:

SELECT ua.UserId, ua.ActionId
FROM UserAction AS ua
ORDER BY ua.UserId ASC, ua.ActionId ASC
LIMIT 5
结果:

1, 100001
1, 100002
1, 100007
2, 100002
2, 100003
这意味着UserId=1执行了100001、100002和100007操作,UserId 2执行了100002和100003操作

这样做还有助于保持数据库的规范化,使将来的查询更容易

与使用文本/字符串值解析列相比,使用此结构可以更轻松地发现用户执行了多少操作(以及其他任务):(我假设您有名称或类似字段)


另外,如果我正在制作表,我会添加
UserActionId
作为自动增量Id列,用作我的
主键

我建议您创建一个
UserAction
表,其中包含
UserId
ActionId
。这样,您就可以引用所执行的操作,而不必在
用户
表的一行中存储多个值

您将为用户执行的每个操作存储行。该表可能如下所示:

SELECT ua.UserId, ua.ActionId
FROM UserAction AS ua
ORDER BY ua.UserId ASC, ua.ActionId ASC
LIMIT 5
结果:

1, 100001
1, 100002
1, 100007
2, 100002
2, 100003
这意味着UserId=1执行了100001、100002和100007操作,UserId 2执行了100002和100003操作

这样做还有助于保持数据库的规范化,使将来的查询更容易

与使用文本/字符串值解析列相比,使用此结构可以更轻松地发现用户执行了多少操作(以及其他任务):(我假设您有名称或类似字段)


另外,如果我正在制作表格,我会添加
UserActionId
作为自动增量Id列,用作我的
主键

,您可以使用
内爆
分解
或JSON。@JCOC611:这是个坏主意,因为它会使原本简单的查询复杂化。例如:选择不包含特定值的行。现在必须在每一行中内爆该值。此外,您还错过了为字段编制索引的机会。@SimpleCoder:您是对的……我想这取决于具体的用途(如果您不需要执行此类查询,也不需要为字段编制索引,那么这是一个选项;否则,创建新表将是最好的选择)。您可以使用
内爆
分解
或JSON。@JCOC611:这是个坏主意,因为它会使原本简单的查询复杂化。例如:选择不包含特定值的行。现在必须在每一行中内爆该值。此外,您还错过了为字段编制索引的机会。@SimpleCoder:您是对的……我想这取决于具体用途(如果您不需要执行此类查询,也不需要为字段编制索引,那么这是一个选项;否则,创建新表将是最好的选择)。但这并不能解决我的问题,我应该如何像您建议的那样将可能数千个6位数的值存储到ActionId行中?您可以在UserAction表中为每个操作创建一行。查找“加入MySQL表”@MrMalayev我已经更新了我的答案,向您展示了这个表中的数据可能是什么样子。但这并不能解决我的问题,我应该如何像您建议的那样将数千个6位数的值存储到ActionId行中?您可以在UserAction表中为每个操作创建一行。查找“加入MySQL表”@MrMalayev我已经更新了我的答案,告诉你这个表中的数据可能是什么样子。