php - 我应该如何将多个值存储到一个 SQL 行中?

标签 php mysql sql

我有一个名为 users 的表,其中一行需要保存用户所做的所有操作,并且这些操作被引用为 action_ids

我如何让行包含多个 action_ids

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

该行可能必须存储成百上千个 6 位值。

最佳答案

我建议您使用 UserIdActionId 创建一个 UserAction 表。这样您就可以引用已完成的操作,而不必在 users 表的一行中存储多个值。

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

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

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

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

SELECT u.Name, COUNT(1) AS NumberOfActionsPerformed
FROM users AS u
INNER JOIN UserAction AS ua ON u.userId = ua.UserId
GROUP BY u.userId, u.Name 
ORDER BY NumberOfActionsPerformed DESC

此外,如果我正在制作表格,我会添加 UserActionId 作为自动增量 Id 列以用作我的 Primary Key

关于php - 我应该如何将多个值存储到一个 SQL 行中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282610/

相关文章:

mysql - MySQL多条件查询

mysql - 在 MySQL 中创建与另一个表匹配的表?

sql - 在 postgresql 数据库中搜索包含特定单词的字符串

PHP curl : Manually setting the content-length header

php - 在 Paypal 交易重定向后隐藏链接的网址,以免被复制以供进一步使用

Python mysqldb 错误关闭连接

c# - 如何使用c#将数据添加到mysql中的指定列

php - 在其他页面访问MySQL连接语句

php - 如何计算图像中的像素数(php)

PHP 文件目录 - $_SERVER ['DOCUMENT_ROOT' ] 的父文件夹