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

时间:2011-11-27 00:06:10

标签: php mysql sql

我有一个名为用户的表,其中一行需要保存用户执行的所有操作,操作引用为action_ids

如何让行保持多个action_ids

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

该行可能必须存储数百或数千个6位数值。

1 个答案:

答案 0 :(得分:6)

我建议您使用UserActionUserId创建一个ActionId表。这样您就可以引用已完成的操作,而无需在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